502 Bad Gateway - NGINX 没有定义解析器来解析

Posted

技术标签:

【中文标题】502 Bad Gateway - NGINX 没有定义解析器来解析【英文标题】:502 Bad Gateway - NGINX no resolver defined to resolve 【发布时间】:2020-01-16 03:10:40 【问题描述】:

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

    listen 80;
    listen [::]:80;

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

            location / 
                    set $instname $1;
                    proxy_pass http://$instnameredzilla.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 ,*(星号)代表任何单词)

【问题讨论】:

您需要定义一个resolver statement。 为什么在这种情况下(在正常情况下)需要解析器语句? @Joe:如果我没记错的话,是因为这次nginx真的需要解析地址:不是传给浏览器去解析,而是nginx自己去获取内容。通常,在做代理时,你会直接使用 unix socket 或 ip。 我也被这个问题困住了。你有想过吗? 泊坞窗中的相同错误。不使用正则表达式匹配并静态指定它可以很好地工作。 snez 的解决方案(添加“解析器 127.0.0.11;”)工作正常。对我来说似乎是一些 nginx 实现细节。 【参考方案1】:

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

然后在你的 server 指令中添加“resolver 127.0.0.11;”

【讨论】:

在我的情况下,将其添加到 location 指令有效,但不是 server 指令。

以上是关于502 Bad Gateway - NGINX 没有定义解析器来解析的主要内容,如果未能解决你的问题,请参考以下文章

Nginx 显示502 Bad Gateway错误

502 bad gateway nginx怎么解决

nginx 502 Bad Gateway 错误解决办法

调试 502 Bad Gateway 错误 - Ubuntu、Nginx、Unicorn

服务器域返回 502 Bad Gateway - Nginx

打开出现502 Bad gateway怎么解决