环境需要
偷懒直接使用宝塔面板,或者mdserver-web,面板主要是方便配置Nginx
域名解析到服务端IP
面板搭建
这里演示我搭建的是开源的mdserver-web
一键安装脚本
curl -fsSL https://cdn.jsdelivr.net/gh/midoks/mdserver-web@latest/scripts/install.sh | bash
安装成功后会显示登录信息,登录后及时修改登录信息
安装OpenResty,OpenResty是基于 Nginx 与 Lua 的高性能 Web 平台,宝塔直接安装Nginx就行。
域名解析
配置例如*.abc.com
的泛域名,记录*
指向frp 服务器地址
.其含义是指访问任何二级域名都是访问到frp 服务器
,由frp 服务器
转发到内网群晖反向代理服务器.
FRPs服务器搭建
下载服务端
wget https://github.com/fatedier/frp/releases/download/v0.45.0/frp_0.45.0_linux_amd64.tar.gz
解压frps到/usr/local/frp目录下
tar -zxvf frp_0.45.0_linux_amd64.tar.gz -C /usr/local/
重命名解压后目录
cd /usr/local&mv frp_0.45.0_linux_amd64 frp
启动frps
使用systemd控制frps开机自启动
新建frps.service文件
nano /etc/systemd/system/frps.service
写入内容
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /usr/local/frp/frps -c /usr/local/frp/frps.ini
[Install]
WantedBy = multi-user.target
使用 systemd
命令,启动并管理 frps。
# 启动frp
systemctl start frps
# 停止frp
systemctl stop frps
# 重启frp
systemctl restart frps
# 查看frp状态
systemctl status frps
配置 frps 开机自启。
systemctl enable frps
配置服务端frps.ini nano /usr/local/frp/frps.ini
[common]
#服务监听的ip
bind_addr = 0.0.0.0
#服务监听端口
bind_port = 4439
#访问web服务需要用到的端口
vhost_http_port = 8001
#https需要用到的端口
vhost_https_port = 4438
####web界面配置###
# 指定 Dashboard 的监听的 IP 地址
dashboard_addr = 0.0.0.0
#指定 Dashboard 的监听的端口
dashboard_port = 8000
# 指定访问 Dashboard 的用户名
dashboard_user = admin
# 指定访问 Dashboard 的端口
dashboard_pwd = admin
#防止被随意注册
token = 123456
# 日志的记录级别,分为debug, info, warn, error四级,日志保存的天数,默认3天
log_file = ./frps.log
log_level = info
log_max_days = 3
# 心跳配置,默认的心跳配置时间是30
heartbeat_timeout = 30
#frp内网穿透服务端监听的端口,如果不设置的话,所有端口都可以连接使用,但为为了不占用系统使用的端口号,建议设置允许的监听端口,比如www.abc.com提供的内网穿透服务器就是开放50000-60000端口
#privilege_allow_ports = 2000-3000,3001,3003,4000-50000
#连接池的数量,如果frp内网穿透客户端设置的连接池的数量大于下面的数值,就会修改frp客户端的连接池为下面的数值
max_pool_count = 100
# 每个客户端最大可以使用的端口,0表示无限制
max_ports_per_client = 0
# frp内网穿透服务端frps和frp内网穿透的客户端frpc两台电脑的时间差,如果设置为0的话,不校验时间差异,默认校验时间差为900秒。
authentication_timeout = 900
# 是否使用tcp复用,默认为true;
# frp只对同意客户端的连接进行复用;
tcp_mux = true
配置完成后systemctl restart frps
重启服务器
至此服务端搭建完毕
FRPc客户端搭建
还是偷懒直接使用套件源安装,群晖套件中心添加社区套件来源。其他安装方式推荐参考此文章客户端 frpc 安装教程汇总 - 思有云 - IOIOX
https://spk7.imnks.com/
搜索frpc安装好
打开套件配置frpc.ini
[common]
server_addr = 0.0.0.0 #服务端ip,也可填写解析好的域名
server_port = 7007 #服务端的bind_port一致
token = 12345678 #与服务端一致
#[xxx]内的备注内容不能重复
[tcp-xxxx]
type = tcp #tcp的代理方式
local_ip = 192.168.1.110 #内网主机ip
local_port = 6690 #内网主机端口
remote_port = 6690 #外网映射端口
[http_xxxxxxx]
type = http #http的代理方式
local_ip = 192.168.1.4 #内网主机ip
local_port = 80 #内网主机端口
custom_domains = *.abc.com #任意二级域名
##使用服务端nginx强制http跳转https这里可以直接不配置https##
#[https_xxxxxxx]
#type = https #https的代理方式
#local_ip = 192.168.1.4 #内网主机ip
#local_port = 443 #内网主机端口
#custom_domains = *.abc.com #任意二级域名
至此客户端配置完成,点击保存frpc套件会自动重启生效
浏览器登录服务端web后台ip:6443
可以看到已经代理生效了
服务端面板配置https代理
前面环境确认已安装好nginx或OpenResty运行环境
配置ssl证书
新建一个站点
面板不支持泛域名证书申请,建议参考此文章部署acme.sh,申请免费SSL证书 - ZM Blog (b-log.ga)申请一个泛域名SSL证书
cat部署好的证书cer、key
查看到的证书内容复制cer、key到面板站点ssl配置并部署
查看面板站点配置文件,找到ssl配置后存放的路径
使用下面acme.sh部署命令,部署刚刚申请的证书,这样证书到期了acme.sh就会自动续签并更新到该路径下
注意替换自己的域名、路径
acme.sh --install-cert -d *.abc.com \
--key-file /etc/letsencrypt/live/*.abc.com/privkey.pem \
--fullchain-file /etc/letsencrypt/live/*.abc.com/fullchain.pem \
域名匹配到frps服务
配置文件在server块插入以下location块,表示该域名匹配代理到本机的8010端口8010端口即frps的http访问端口
location / {
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8010;
}
在配置文件中找到以下两个location块删除,不然网页会显示不正常
重启会重载nginx后
至此访问一个frp代理的http网页,就会自动成功跳转到htpps。