Nginx-动态DNS解析方案

534 views
Skip to first unread message

huang jindong

unread,
Aug 2, 2017, 3:12:23 AM8/2/17
to openresty
Hi All,

需求是这样的,upstream下挂有多个域名,但是nginx只在启动时解析一次DNS,现在想实现一个动态解析。

若是一个域名的情况好解决,可以使用proxy_pass+变量的方案解决。

据我所知的动态解析方案有:
* 使用脚本判断IP是否变化,reload nginx.
* Tengine中的dynamic reslove指令,缺点是需要修改nginx核心。
* 第三方模块https://github.com/GUI/nginx-upstream-dynamic-servers, 缺点是不能与健康检查,dyups等模块兼容
* Nginx-Plus...


我想请教大家还有无更hack的方案:)








Zexuan Luo

unread,
Aug 2, 2017, 9:44:29 PM8/2/17
to openresty
补充一个 balancer_by_lua*,缺点是相关的辅助设施可能需要自己造。

huang jindong

unread,
Aug 2, 2017, 9:47:37 PM8/2/17
to openresty
Right :)

On Thursday, August 3, 2017 at 9:44:29 AM UTC+8, Zexuan Luo wrote:
补充一个 balancer_by_lua*,缺点是相关的辅助设施可能需要自己造。

huang jindong

unread,
Aug 7, 2017, 6:13:27 AM8/7/17
to openresty
有一个相对不错的方法:

既然单个域名可以配置成变量使得nginx遵循TTL,那么我们就把多个域名拆分成一个个的单域名,如下:

 resolver 8.8.8.8; # DNS server

 server {

               listen 8081;

               allow 127.0.0.1;

               deny all;

 

               set $domain www.baidu.com;  // domain

               location / {

                       access_log off;

                       proxy_pass http://$domain;

               }

       }

        server {

               listen 8082;

               allow 127.0.0.1;

               deny all;


               set $domain www.google.com;

               location / {

                       access_log off;

                       proxy_pass http://$domain;

               }

       }



然后upstream就代理127.0.0.1:8081 && 127.0.0.1:8082,以此类推

亲测可行,抓包也显示DNS会在过期时再次请求。
Reply all
Reply to author
Forward
0 new messages