众所众知,nginx 可以做反向代理

我家是电信的公网 ip, 有公网但是没有 80 和 443, 更别说备案了,这怎么办呢。正好看到阿里云有个 2c2g 的一年服务器只需 40+,还有 3M 的宽带,做 nginx 转发完全够了呀!

于是我立马下单,很快的做好了 nginx 反向代理和域名的备案,就是你们现在所看到的这个站(blog.dimeta.top,假如是 ifengdian 的话应该是 bing 收录爬取到非公开的了😂)。

但是我发现家里的公网 ip 一变动,ifengdian.top 的 ddns 解析也会一起跟着动,按理说只需要等待 10 分钟,ttl 过去后反代的 blog.dimeta.top 就可以正常访问了呀,可是为啥一变动后就会 502 呢,而且一重启 nginx 就就可以了。

搜索之后发现:

nginx 只会在启动时候进行一次域名解析,导致 ddns 更新后还是连接原 ip。

经过这个博文指点:

  • 首先想到的是,使用 upstream 进行反向代理就可以很好地解决这个问题,但是因为 data.misssun.com 这个域名对应的服务器 IP 地址会动态的变化,导致 upstream 反向代理会出现 502 的情况。

  • 通过查阅资料,发现可以通过制定 resolver 字段对域名进行间隔时间的解析,可以完美的实现动态地址解析的效果。通过 resolver 可以配置多个 DNS 服务器地址,Nginx 会采用轮询的方式去访问 DNS 服务,Nginx 会缓存 DNS 对域名解析的结果,缓存的时间由 valid 指定。

我明白了只需要使用变量的方式设置反代地址并设置 10s 的解析缓存,就可以完美解决这个问题

再次访问 blog.dimeta.top,更改源站 IP,10 分钟不到就可以恢复访问,完美!