6

所以,我想proxy_pass在我的服务器上的 .local 区域中由 Avahi 控制的动态流浪机器。我有一个 nginx 虚拟主机配置:

server {
        listen 80;
        server_name     ~^(?<subdomain>.+)\.example\.com$;

        location / {

                resolver 127.0.0.1 valid=30s;

                proxy_set_header            Host $http_host;
                proxy_set_header            X-Real-IP $remote_addr;
                proxy_set_header            X-Forwarded-Proto $scheme;
                proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header            Host $host;

                proxy_pass                  http://$subdomain-example.local;
                proxy_connect_timeout       600;
                proxy_send_timeout          600;
                proxy_read_timeout          600;

                send_timeout                600;

        }
    }

Nginx 在 /var/log/nginx/error.log 中向我返回了一个错误:

2016/09/26 18:03:34 [error] 24401#24401: 
*1 no resolver defined to resolve test-example.local, 
client: 192.168.1.101, 
server: ~^(?<subdomain>.+)\.example\.com$, 
request: "GET / HTTP/1.1", 
host: "test.example.com"

但是,如果我手动设置$subdomain为“测试”,例如,它可以正常工作并传递给我真正想要的 test-example.local 机器。

如何让它真正充满活力?我应该在我的虚拟主机配置中更改什么?

4

1 回答 1

1

当 NGINX 启动或重新加载其配置时,它会查询 DNS 服务器以解析域名。NGINX 从操作系统配置文件 /etc/resolv.conf 中选择 DNS 服务器。当您在 proxy_pass 指令中使用变量指定域名时,NGINX 不会引用 /etc/resolv.conf。

您可以使用 proxy_pass 指令中的 IP 地址代替域名。

阅读https://www.nginx.com/blog/dns-service-discovery-nginx-plus了解更多详情。

于 2022-01-08T21:01:34.537 回答