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 没有定义解析器来解析的主要内容,如果未能解决你的问题,请参考以下文章
调试 502 Bad Gateway 错误 - Ubuntu、Nginx、Unicorn