gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:50:29 24 4
gpt4 key购买 nike

我要每次都解析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 代理才能完美运行。当我同时使用它时,它返回 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/$1$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/;
    }
    }
  • 关于nginx - 在变量中设置相同的域名不适用于 nginx 中的多个位置 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59502366/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com