2011-11-29 19 views
26

可以使用/etc/hosts代替解析器使用時proxy_pass使用proxy_pass時,可以使用/ etc/hosts來解析域名而不是「解析器」?

我需要對同一個nginx機器執行proxy_pass。有沒有辦法使用機器的/ etc/hosts文件來解析域,而不是通過「resolver」屬性指定DNS服務器?

這將節省我到達同一臺服務器所需的額外跳數。我曾嘗試設置內部IP映射到/ etc/hosts文件中的DNS,但nginx仍在從設置在解析器屬性中的DNS服務器讀取。或者有沒有辦法讓HTTPProxy模塊考慮/ etc/hosts文件設置?

感謝您能分享任何建議..

這是同樣的問題我張貼在nginx的論壇: http://forum.nginx.org/read.php?11,218997

+0

奇怪的是,這是工作,如果你使用上游(主機分辨率) –

回答

39

您可以通過安裝dnsmasq和您的解析器設置爲127.0.0.1解決這個問題。基本上它使用你的本地DNS作爲解析器,但它只解決它所知道的信息(其中包括你的/etc/hosts),並將剩餘的DNS轉發給你的默認DNS。

+0

我想知道爲什麼這不被標記爲正確的答案 –

+5

但很遺憾'dnsmasq'不會自動檢測'hosts'文件中的變化。你必須發送'HUP'。 – Mitar

3

解決方法是使用Nginx地圖,以便複製/etc/hosts內容。

map $wanted_host $wanted_host_ip 
{ 
    default 127.0.0.1; 
    b.dev.local X.X.X.X; 
    a.dev.local X.X.X.X; 
} 

server 
{ 
    listen    80; 
    server_name   ~^(?P<wanted_port>[0-9]+?)-(?P<wanted_host>.+?)\.HOSTNAME$; 

    location/
    { 
     proxy_pass http://$wanted_host_ip:$wanted_port; 

    } 
} 

這將映射到wanted_hostwanted_host_ip,像一個解析器。