上班摸鱼摸不动了
目标:实现用公网域名访问局域网的服务,部署完成后,可以使用网页面版操作配置
设备:一台有公网IP的服务器,一台需要穿透的内网服务器,一个域名
前置条件:两台服务器上均安装了docker,域名已经解析到了公网服务器的ip(国内请自行解决备案问题)
使用到的软件:frp-panel、nginx-proxy-manager
第一步:在公网服务器上安装frp-panel、nginx-proxy-manager
先放两个docker-compose,请自行为两个软件创建文件夹
frp-panel
version: '3'
services:
frp-panel:
image: vaalacat/frp-panel
container_name: frp-panel
network_mode: host
restart: unless-stopped
volumes:
- ./frp-panel:/data # 数据存储位置
environment:
- APP_GLOBAL_SECRET=xxx # Master的secret注意不要泄漏,客户端和服务端的是通过Master生成的
- MASTER_RPC_HOST={} # 这里要改成你服务器的外部IP
- MASTER_RPC_PORT=9009 #Master节点 RPC 端口,默认为9001,我因为与portainer冲突所以做了修改
- MASTER_COMPATIBLE_MODE=true
nginx-proxy-manager
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
再附赠一个docker镜像加速的服务,论坛帖子
第二步:配置Nginx
上面的安装完毕后打开{公网ip}:81,打开nginx-proxy-manager的面版
默认密码,建议登录后第一时间自行修改
Email: [email protected]
Password: changeme
打开面版后创建一个这样的代理,代理面本身,ssl部分填入自己的邮箱,nginx-proxy-manager可以自己获取证书,非常非常的Nice,这样你就可以使用HTTPS访问你的nginx-proxy-manager。
同理,为frp-panel创建代理
进入如下界面,为你的你的域名创建一张泛域名的ssl证书,方便以后使用,这里仅用Cloudflare做演示(因为我的域名托管在CF上,其他的不是很清楚)
选择Let’s Encrypt,然后添加一个*.linux.do,你可写你的域名,我这里拿linux.do举例
然后去cloudflare创建一个令牌,替换红框里的token,点击保存,等待一会你就可以获得一个泛域名证书
第三步:配置frp-panel
进入服务端配置
填写ip、端口等信息,然后点击保存。
之后我们回到nginx-proxy-manager面版,为frp创建一个泛域名代理,如下图所示,SSL证书就选择上一步中获取的泛域名证书
在高级设置中填入如下代码:这里的ip是可以填你的公网ip,或者服务商为服务器提供的内网ip,端口填写你刚刚在frp-panel中填写的http端口
location / {
proxy_pass http://172.17.0.1:8880;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_cache_bypass $http_upgrade;
proxy_max_temp_file_size 0;
proxy_redirect off;
proxy_read_timeout 240s;
}
第四步:frp客户端端
在frp-penal上新建一个客户端,复制启动命令,应该是下面这样一串
frp-panel client -s ********-****-****-****-************ -i *******.c.frp -a *** -r ***.**.**.*** -c **** -p **** -e http
然后正确填入下面的docker-compose,在你的内网主机上启动客户端的就大工告成了
version: '3'
services:
frp-panel-client:
image: vaalacat/frp-panel
container_name: frp-panel-client
network_mode: host
restart: unless-stopped
command: client -s ********-****-****-****-************ -i *******.c.frp -a *** -r ***.**.**.*** -c **** -p **** -e http
总结
此时你可以再你的frp-penal上进行内网穿透的配置,不再需要文件配置,可以直接使用https访问,http会自动跳转https,并且不影响你vps其他服务的使用,依旧可以正常使用nginx-proxy-manager进行域名反代