gpt4 book ai didi

nginx - IP 和 Nginx 作为反向代理时出错

转载 作者:行者123 更新时间:2023-12-03 15:20:21 26 4
gpt4 key购买 nike

我将我的 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 Gateway Time-out。当我在家里更改 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 value 不包含变量,nginx 将在加载配置时将域名解析为 IP 并缓存它们,直到您重新启动/重新加载它。从性能的角度来看,这是完全可以理解的。

但是,如果发生动态 DNS 记录更改,则可能不需要这样做。因此,根据您是否拥有许可证,有两种选择。

商业版(Nginx+)

在这种情况下,使用上游 block 并指定需要使用特定解析器定期解析的域名。可以使用 valid=time 覆盖记录 TTL范围。 resolve server 的参数指令将强制定期解析 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处理重定向的指令。

关于nginx - IP 和 Nginx 作为反向代理时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26956979/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com