我将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记录更改的情况下,可能不需要这样做。因此,根据您是否拥有许可证,有两个选项可用。
在这种情况下,请使用上游块并指定需要使用特定解析器定期解析的域名。使用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中添加了此功能。
在这种情况下,您还将需要一个自定义解析器,就像前面的解决方案一样。但是要解决不可用的上游解决方案,您需要在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
指令来处理重定向。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句