在变量中设置相同的域名不适用于 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 的两件事

  1. 您使用的 DNS 解析器可能有误。请与您确认 基础设施管理员。根据您的 DNS 解析器,我猜您的 AWS VPC CIDR 块是 10.0.0.0/16。如果正确,则使用 10.0.0.2 作为 DNS 解析器。

  2. 另外,当您使用动态代理(通过变量代理)时,您还需要指定查询参数。对我有用的正确语法如下

    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/; } }