1. 程式人生 > >Nginx動態解析域名方案?

Nginx動態解析域名方案?

nginx動態解析域名方案

應用場景:

由於有時候nginx代理的時候,第三方域名對應的ip可能發生變化,然而沒有提前通知,然而如果不配置什麽,nginx又不能智能解析,因此nginx動態解析域名就比較重要,這裏拿nignx來說,根據公司應用場景,分享一下,感謝公司可以讓自己了解更多,更全面的東西。


一、使用模塊nginx-upstream-dynamic-servers

該模塊在啟動nginx的時候會對域名進行一次解析,解析完成後,在DNS服務器設定的TTL過期時間內不會再次更新,在TTL過期後則會再次發起域名解析請求更新域名所對應的IP地址。

需要在nginx的配置文件中的http配置域內指定使用的DNS服務器,在upstream中需要進行域名解析的server後面添加resolve參數。

例:

http {

resolver ip;

upstream test {

server www.xxx.com:8080 resolve;

}


server {

listen 8080;

client_body_buffer_size 10m;

server_name localhost;

location / {

proxy_pass http://test;

}

}

缺點:

1、每次解析域名之後,會從DNS服務器獲取到改DNS的TTL,在TTL期限內不會再次解析,所以如果目標域名發生改變,nginx不會更新解析,知道TTL過期。

2、DNS服務器在http配置域配置全,不能在location中細分指定。


二、使用模塊ngx_upstream_jdomain

在http配置域中配置DNS服務器,在upstream中按照這個模塊的格式配置,支持設置每隔多少秒進行一次解析(抓包分析過設置interval可指定解析間隔),如果解析失敗則使用緩存中的上一次解析結果的IP地址訪問。

例:

http {

resolver ip;

upstream test {

jdomain www.xxx.com port=8080 interval=10; #指定域名和端口,每隔10秒進行一次解析

}

server {

listen 8080;

client_body_buffer_size 10m;

server_name localhost;

location / {

proxy_pass http://test;

}

}

缺點:DNS服務器只能在http配域中全局配置


三、原生nginx使用set命令使用變量

將域名置於變量中,在對proxy_pass進行轉發的時候域名調用變量,可以按照valid,設置的時間參數間隔地對變量中的域名進行解析。

例:

server {

listen 8080;

client_body_buffer_size 10m;


server_name localhost;



location / {

resolver ip valid=3s;

set $five "www.xxx.com:8080";

proxy_pass http://${five};

}


缺點:upstream中不支持設置變量,因此後端有多臺的時候該方案不可行。


四、Tengine

在upstream中配置dynamic_resolve,在location配置域中指定NDS服務器,按照valid設置的時間間隔地進行地址解析。

例:

http {

upstream test {

dynamic_resolve fallback=stale fail_timeout=30s;

server www.xxx.com:8080;

}

server {

listen 8080;

location / {

resolver ip valid=3s;

proxy_pass http://test;

}


}


缺點:需要將nginx的bin文件替換為tengine的bin文件。



本文出自 “永不放棄!任誌遠” 博客,謝絕轉載!

Nginx動態解析域名方案?