nginx反向代理Cloudflare的Workers服务
前言
proxy_ssl_server_name on
proxy_ssl_server_name on;
是 Nginx 中的一个指令,用于启用反向代理的 SNI(Server Name Indication) 支持。SNI 是一个扩展协议,允许客户端在握手时指定访问的目标主机名,从而使同一个 IP 地址的服务器能够区分不同的 SSL 证书。如果目标服务器使用了 SNI,但反向代理相关服务时没有启用 proxy_ssl_server_name
,可能会导致握手失败或证书验证错误。比如想反向代理Cloudflare家worker搭建的服务(dockerhub镜像服务,订阅转换服务等),就必须开启proxy_ssl_server_name
。当然本期分享的内容也可以代理其他服务,比如使用自己的域名加速访问在GitHub Pages上搭建的服务,访问自己的域名就能打开百度等。这些服务的共同点都是https服务且是域名形式。
反代流程
个人在使用Nginx proxy manage
反代时,大多数目标服务都是ip:端口
的形式,但有的时候想在其webui界面反向代理https协议的域名服务比如反代百度域名,尝试下来都失败,发现域名形式均无法创建成功。这样的话只能使用nginx来配置了,如果直接安装nginx,端口又会冲突(80和443已经被Nginx proxy manage
占用)。因此Nginx proxy manage
和nginx在同一服务器只能选一个,不过Nginx proxy manage
的域名ssl证书申请和自动续期都非常方便,还是不想放弃使用,故使用docker再起个nginx容器,这样就可以通过宿主机的ip和nginx容器的外部端口访问nginx服务(实现ip:端口),用这个nginx服务再来反向代理https协议的域名服务。
简单说就是,Nginx proxy manage
使用域名反代本机Nginx 服务(ip:端口形式),Nginx再反代目标服务的域名。
准备工作
- 一个域名
- 一台公网主机(VPS)
- 域名解析到vps主机的ip
- ssh连接工具(finalshell或Tabby Terminal或xshell等都可以)
- 小主机上安装好
docker
,docker-compose
, - docker安装
Nginx proxy manage
,和nginx
Nginx容器
创建文件目录
1 | mkdir -p /root/data/docker_data/nginx-proxy |
docker-compose.yml
1 | version: '3' |
nginx.conf
1 | user nginx; |
运行:
1 | docker-compose up -d |
浏览器输入IP:8623,出现和被反代的https://psub.dekviw233.workers.dev/一样的页面就说明成功了。
后续再使用Nginx proxy manage
反代ip:8623就可以使用https协议的域名访问了。
Nginx proxy manage搭建并反代
创建文件目录
1 | mkdir -p /root/data/docker_data/npm |
docker-compose.yml
1 | version: '3' |
运行:
1 | docker-compose up -d |
浏览器输入IP:9981
,就可以访问Nginx proxy manage。
Nginx proxy manage使用流程
先点击页面1的添加代理(Add Proxy Host)
- 输入解析到主机的域名
- 输入主机ip
- 输入nginx容器映射到主机的端口
- 点击SSL
- 选择刚刚添加的域名
- 强制SSL
- 点击勾选同意协议
- 点击保存,等待证书申请下来
后面输入域名访问就可以了
随便再试试
反向代理百度,用自己的域名访问百度,还可以搜索。
当然代理百度没啥实际意义,纯粹是玩,但是用线路好的vps反向代理国内访问线路不稳的github,githubpage(自己的博客服务等)等其他服务还是不错的。