在变量中设置相同域名不适用于nginx中的多个位置块

在变量中设置相同域名不适用于nginx中的多个位置块,nginx,nginx-location,nginx-reverse-proxy,nginx-config,Nginx,Nginx Location,Nginx Reverse Proxy,Nginx Config,每当有新请求出现时,我想解析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

每当有新请求出现时,我想解析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\u服务器在两个位置块中都使用。如果我使用其中任何一个,只有Nginx代理可以完美地工作。当我同时使用两者时,返回502

我做错了什么?
提前谢谢

DNS解析器不使用代理URL的两个原因

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

  • 此外,在使用动态代理(通过变量代理)时,还需要指定查询参数。对我有效的正确语法如下所示

    服务器{
    位置/mypath/(*){
    解析程序10.0.0.2 ipv6=off有效=10s;
    解析器超时30秒;
    设置$backend_servers backends.example.com;
    代理传递http://$backend\u servers/mypath/$1$is\u args$args;
    }
    位置/mysecondpath/(*){
    解析程序10.0.0.2 ipv6=off有效=10s;
    解析器超时30秒;
    设置$backend_servers backends.example.com;
    代理传递http://$backend\u servers/mysecondpath/;
    }
    }


  • 您是对的,我刚刚确认,我的VPC的CIDR块是10.0.0.0/16,但不幸的是无法在10.0.0.2之前解析。您是在哪个环境下工作,aws还是本地?它不会在本地解析DNS,因此无法在本地解析DNS。