這篇文章的更新拖了半個(gè)月,真的是感動(dòng)中國了。
創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、邵原網(wǎng)絡(luò)推廣、微信小程序、邵原網(wǎng)絡(luò)營銷、邵原企業(yè)策劃、邵原品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供邵原建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com
Nginx 默認(rèn)會(huì)緩存 DNS,大家都知道,如果做反向代理,其實(shí)是訪問的目標(biāo) ip,所以一旦緩存了目標(biāo) ip 就會(huì)非常麻煩。
茴字的四種寫法遠(yuǎn)近聞名,萬萬沒想到,Nginx 動(dòng)態(tài) DNS 反向代理也有 N 種玩法,這主要取決于你用的 Nginx 版本,當(dāng)然運(yùn)維告訴我,最好是不要用動(dòng)態(tài) DNS,但是基于業(yè)務(wù)需要,咱們也沒有辦法。
茴字的第一種寫法:Nginx
在 Nginx 中通過設(shè)置變量可以曲線救國,當(dāng)然有缺點(diǎn),通過變量的方法沒有辦法進(jìn)行負(fù)載均衡,非常麻煩,當(dāng)然如果你只有單機(jī)(在實(shí)際業(yè)務(wù)場景中幾乎不存在),還是可以一試的:
server { ... resolver 127.0.0.1; set $backend "http://dynamic.example.com:80"; proxy_pass $backend; ... }
第二種寫法:Nginx Plus
當(dāng)然 Nginx 不太好用,增強(qiáng)版的 Plus 就提供了一個(gè)更棒的寫法,它支持在 server 中寫入:
server { ... resolver 127.0.0.1 valid=30s; proxy_pass http://upstream-sites; ... }
第三種寫法:Tengine
Tengine 是淘寶家的魔改 Nginx,其實(shí)我挺煩的,因?yàn)樽铋_始我不知道我們用的是 Tengine,導(dǎo)致配置沒有什么卵用,但是 Tengine 對(duì)于動(dòng)態(tài)域名解析卻支持的非常不錯(cuò),官方文檔寫得也很清楚。
upstream backend { dynamic_resolve fallback=stale fail_timeout=30s; server a.com; server b.com; } server { ... location / { proxy_pass http://backend; } }
其他
當(dāng)然,還可以使用 Lua 腳本來實(shí)現(xiàn),或者是別人的模塊,但是考慮到怕鼓搗壞,我還是不亂折騰了,所以沒有采取這種方案。
參考
ngx_http_upstream_dynamic_module - Tengine
Using DNS for Service Discovery with NGINX and NGINX Plus
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。