通过OpenResty反向代理动态解析域名

使用背景:
1.“众所周知”的原因,国内的ADSL(家庭用)是不支持80端口开放的,并且是不提供固定IP的(当然也可以提供,但费用就……)
2.鉴于以上原因,如果想避免在地址栏输入端口号,技术上解决的处理措施就是通过反向代理(Reverse Proxy)。
3.支持Reverse Proxy的包括有:nginx, squid,apache据说可以行。但nginx是最简单的。
3.nginx的反向代理机制:

nginx只在服务启动时,通过域名解析查询proxy_pass所指向地址的IP地址,并进行缓存,并且这个缓存的地址一直存在,除非服务重启。

由此带来的问题是,当域名的IP地址发生变化时,nginx所指向的IP还是缓存的IP,那么当你访问时,就会反馈502错误。我曾经在这篇文章《nginx反向代理504错误处理笔记》错误的以为是代理的缓存不够造成的。

这篇文章《nginx对动态域名不重新解析的问题》通过增加php脚本,间隔查询缓存中ip与真实ip的是否一致,当不一致时,则重新启动nginx服务。这的确也是一种处理的方式,而且这也是一种非常有效的处理方式。
我不是处女座,但重启服务这种“暴力方式”在我看来仍然不够完美。在这篇文章《Nginx, reverse proxies and DNS resolution》中提到了可能通过著名的nginx-lua模块可以处理这个问题。
nginx-lua模块是国内两位大神chaoslawful和agentzh开发的。前者还在淘宝,后者现在已经到了cloudflare(本站的CDN)。前者在淘宝开发了著名的tengine,后者则开发了更高效的"OpenResty"。
既然知道了解决问题的方向,那么问题就好办了。接下来就是处理的方法。

1.安装OpenResty,默认安装即可。并启动OpenResty,并测试服务正常。
2.增加conf。实例如下:

3.重启OpenResty。

引用文章:
1.nginx对动态域名不重新解析的问题
2.Nginx, reverse proxies and DNS resolution
3.Debian(阿里云)下安装openresty框架

发表评论

电子邮件地址不会被公开。 必填项已用*标注