nginx 在流中使用解析器

sco*_*lew 3 nginx

我正在尝试使用 nginx 将传入连接传递到另一台服务器(我这样做的原因是连接来自无法进行 DNS 解析的主机,而最终应该接收流量的服务器需要由 DNS 解析)。我正在使用以下配置:

stream {
        resolver 127.0.0.1 valid=1s;
        upstream server_us {
                server server.foo.com:22222;
        }
        server {
                listen 11111;
                proxy_pass server_us;
        }
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么名称解析没有按照“valid”指令指定的那样过期。(即,如果我更改 /etc/hosts 中 server.foo.com 的 IP,nginx 无法识别该更改)。我究竟做错了什么?

Ale*_*Ten 5

Nginx 在启动时解析文字域名并永久缓存解析的 IP。

\n

指令中有用于重新解析域名的resolve参数server,但它仅在商业订阅中可用。

\n

常见的 \xe2\x80\x9chack\xe2\x80\x9d 是在中使用变量proxy_pass(但不能使用upstream指令)。

\n
\n

也可以使用变量指定地址

\n

[...]

\n

在这种情况下,将在所描述的服务器组中搜索服务器名称,如果未找到,则使用 来确定resolver

\n
\n

例如

\n
stream {\n    resolver 127.0.0.1 valid=1s;\n\n    # a hack to declare $server_us variable\n    map "" $server_us {\n        default server.foo.com:22222;\n    }\n\n    server {\n        listen 11111;\n        proxy_pass $server_us;\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n