在变量中设置相同的域名不适用于 nginx 中的多个位置块
Setting same domain name in a variable not working for multiple location block in nginx
我想每次解析DNS当有新的请求时,
我试图通过在变量中设置 DNS 来在 Nginx 中动态解析 DNS。它在以下示例中正常工作。
server {
location /mypath {
resolver 10.0.3.2 10.0.2.2 ipv6=off valid=10s;
resolver_timeout 30s;
set $backend_servers backends.example.com;
proxy_pass http://$backend_servers/mypath;
}
}
但是当我在变量中有多个具有相同 DNS 名称的位置块时,它无法解析 DNS。
server {
location /mypath {
resolver 10.0.3.2 10.0.2.2 ipv6=off valid=10s;
resolver_timeout 30s;
set $backend_servers backends.example.com;
proxy_pass http://$backend_servers/mypath;
}
location /mysecondpath {
resolver 10.0.3.2 10.0.2.2 ipv6=off valid=10s;
resolver_timeout 30s;
set $backend_servers backends.example.com;
proxy_pass http://$backend_servers/mysecondpath;
}
}
如果您观察到 $backend_servers 用于两个位置块。如果我使用其中任何一个,只有 Nginx 代理才能完美运行。当我同时使用它时 returns 502.
我这里做错了什么?
提前致谢。
DNS 解析器无法使用代理 URL 的两件事
您使用的 DNS 解析器可能有误。请与您确认
基础设施管理员。根据您的 DNS 解析器,我猜您的 AWS VPC CIDR 块是
10.0.0.0/16。如果正确,则使用 10.0.0.2 作为 DNS 解析器。
另外,当您使用动态代理(通过变量代理)时,您还需要指定查询参数。对我有用的正确语法如下
server {
location /mypath/(.*) {
resolver 10.0.0.2 ipv6=off valid=10s;
resolver_timeout 30s;
set $backend_servers backends.example.com;
proxy_pass http://$backend_servers/mypath/$is_args$args;
}
location /mysecondpath/(.*) {
resolver 10.0.0.2 ipv6=off valid=10s;
resolver_timeout 30s;
set $backend_servers backends.example.com;
proxy_pass http://$backend_servers/mysecondpath/;
}
}
我想每次解析DNS当有新的请求时, 我试图通过在变量中设置 DNS 来在 Nginx 中动态解析 DNS。它在以下示例中正常工作。
server {
location /mypath {
resolver 10.0.3.2 10.0.2.2 ipv6=off valid=10s;
resolver_timeout 30s;
set $backend_servers backends.example.com;
proxy_pass http://$backend_servers/mypath;
}
}
但是当我在变量中有多个具有相同 DNS 名称的位置块时,它无法解析 DNS。
server {
location /mypath {
resolver 10.0.3.2 10.0.2.2 ipv6=off valid=10s;
resolver_timeout 30s;
set $backend_servers backends.example.com;
proxy_pass http://$backend_servers/mypath;
}
location /mysecondpath {
resolver 10.0.3.2 10.0.2.2 ipv6=off valid=10s;
resolver_timeout 30s;
set $backend_servers backends.example.com;
proxy_pass http://$backend_servers/mysecondpath;
}
}
如果您观察到 $backend_servers 用于两个位置块。如果我使用其中任何一个,只有 Nginx 代理才能完美运行。当我同时使用它时 returns 502.
我这里做错了什么? 提前致谢。
DNS 解析器无法使用代理 URL 的两件事
您使用的 DNS 解析器可能有误。请与您确认 基础设施管理员。根据您的 DNS 解析器,我猜您的 AWS VPC CIDR 块是 10.0.0.0/16。如果正确,则使用 10.0.0.2 作为 DNS 解析器。
另外,当您使用动态代理(通过变量代理)时,您还需要指定查询参数。对我有用的正确语法如下
server { location /mypath/(.*) { resolver 10.0.0.2 ipv6=off valid=10s; resolver_timeout 30s; set $backend_servers backends.example.com; proxy_pass http://$backend_servers/mypath/$is_args$args; } location /mysecondpath/(.*) { resolver 10.0.0.2 ipv6=off valid=10s; resolver_timeout 30s; set $backend_servers backends.example.com; proxy_pass http://$backend_servers/mysecondpath/; } }