502 错误网关 - NGINX 未定义解析器来解析

问题描述 投票:0回答:2

我已经为多个 URL 创建了代理通行证。

    listen 80;
    listen [::]:80;

    server_name ~^(.*)redzilla\.11\.75\.65\.21\.xip\.io$;

            location / {
                    set $instname $1;
                    proxy_pass http://${instname}redzilla.localhost:3000;
            }

当我使用chrome调用此服务时,触发了502错误。

http://test.redzilla.11.75.65.21.xip.io/

我通过对 URL 进行硬编码来放置下面的位置标记。

            location /redzilla {
                    proxy_pass http://test.redzilla.localhost:3000;
            }

然后它仅适用于上述 URL。我想知道如何为单个位置标记内的多个 URL 创建代理通行证。 (请注意:URL 模式为 *.redzilla.localhost:3000 ,*(星号)代表任何单词)

nginx localhost reverse-proxy nginx-reverse-proxy
2个回答
17
投票

如果您在 docker 中使用 nginx,请使用 docker network create ... 定义一个网络。属于该网络一部分的容器(通过 docker run 上的 --network 标志)将添加一个可用的 dns 解析器通过 127.0.0.11.

然后在您的 server {} 指令中添加“resolver 127.0.0.1;”


3
投票

如果你确实需要动态域名那么你需要使用解析器。

但是,如果 proxy_pass 中有变量但域名中没有变量,最简单的解决方案是使用上游指令定义服务器。

参见 https://nginx.org/en/docs/http/ngx_http_upstream_module.html

示例:

upstream backend {
    server backend.example.com;
}

server {
    location /(?<uri_match_prefix>.*)$ {
        proxy_pass http://backend/$uri_match_prefix$is_args$args;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.