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)的用户也命中,有两种方案。

  1. 为根域名额外写一个配置文件
  2. 添加如下配置让NGINX给用户自动添加www作为子域名:
    if ($subdomain = ''){
        set $subdomain www;
    }