簡體   English   中英

IP和Nginx作為反向代理時出錯

[英]Error with IP and Nginx as reverse proxy

我將我的Nginx配置為簡單的反向代理。

我只是使用基本設置

location / {
    proxy_pass foo.dnsalias.net;
    proxy_pass_header Set-Cookie;
    proxy_pass_header P3P;
}

問題是,經過一段時間(幾天)后,nginx背后的網站變得無法訪問。 Indead nginx嘗試調用一個壞的ip(nginx背后的網站在我家后面的盒子里,我使用的是dyn-dns,因為我的ip不是固定的)。 這個dyn-dns總是有效的(我可以直接調用我的網站),但由於不明原因,Nginx卡住了這個...

如上所述,nginx只是在一段時間后給我504網關超時。 當我的IP在家里改變時,看起來錯誤就來了。 以下是錯誤日志示例:

[error] ... upstream timed out (110: Connection timed out) while connecting to upstream, client: my.current.ip, server: myreverse.server.com, request: "GET /favicon.ico HTTP/1.1", upstream: "http://my.old
.home.ip", host: "myreverse.server.com"

所以你知道為什么nginx使用ip而不是DN嗎?

如果proxy_pass值不包含變量,則nginx會在加載配置時將域名解析為IP並將其緩存,直到重新啟動/重新加載它為止。 從性能的角度來看,這是可以理解的。

但是,在動態DNS記錄更改的情況下,這可能不是所希望的。 因此,根據您擁有或不擁有的許可證,有兩種選擇。

商業版(Nginx +)

在這種情況下,使用上游塊並指定需要使用特定解析器定期解析哪個域名。 記錄TTL可以使用valid=time參數覆蓋。 server指令的resolve參數將強制定期解析DN。

http {    

    resolver X.X.X.X valid=5s;

    upstream dynamic {
        server foo.dnsalias.net resolve;
    }

    server {

        server_name www.example.com;

        location / {
            proxy_pass http://dynamic;
            ...
        }

    }

}

此功能已添加到Nginx + 1.5.12中。

社區版(Nginx)

在這種情況下,您還需要一個自定義解析器,如上一個解決方案中所示。 但要解決不可用的上游解決方案,您需要在proxy_pass指令中使用變量。 這樣nginx也會使用解析器,尊重使用valid參數指定的緩存時間。 例如,您可以使用域名作為變量:

http {  

    resolver X.X.X.X valid=5s;

    server {

        server_name www.example.com;
        set $dn "foo.dnsalias.net"; 

        location / {
            proxy_pass http://$dn;
            ...
        }

    }

}

然后,您可能需要添加proxy_redirect指令來處理重定向。

也許請查看http://forum.nginx.org/read.php?2,215830,215832#msg-215832

resolver 127.0.0.1;
set $backend "foo.example.com";
proxy_pass http://$backend;

In such setup ip address of "foo.example.com" will be looked up
dynamically and result will be cached for 5 minutes.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM