0x00
由于家里的80和443端口均已被封,只能寻求阿里云或腾讯云等第三方云主机提供80和443端口的转发。
除了FRP简单粗暴的转发方式以外,NGINX也是一种可行方式。
但NGINX有两个问题,一个是当家里的公网地址变动之后,DDNS解析依然还是原来的IP地址,导致后端502,这个问题的解决方案,请参考这里
另外一个问题则是每个增加/改动一个子域名就要在NGINX上增加/修改一次域名配置文件,非常的麻烦。
本章将讨论关于该问题的解决方案。
0x01
添加NGINX泛域名反向代理
以我方 furry.top
为例。
要实现泛域名反向代理,就必须在server_name上做配置,让用户不管访问什么子域名,都匹配到这个虚拟服务器上。
这个时候,就要对server_name使用正则表达式。
关键是这一句:server_name ~^(?<subdomain>.+).furry.top$;
这一句的作用就是匹配所有子域名,都命中这个虚拟服务器的配置。
接下来就是设置反向代理:
resolver 114.114.114.114 valid=5s;(<--这个配置文件的来源以及作用请参阅0x00)
set $upstream "https://<后端地址>:<端口号>";
proxy_pass $upstream;
0x02
保存退出,重启NGINX
service nginx restart
这样,用户不管访问a.furry.top还是b.furry.top,都会反向代理给后端服务器,命中后端服务器的a.furry.top 以及 b.furry.top。
0x03
如果想让访问根域名(furry.top)的用户也命中,有两种方案。
- 为根域名额外写一个配置文件
- 添加如下配置让NGINX给用户自动添加www作为子域名:
if ($subdomain = ''){
set $subdomain www;
}