Nginx反向代理出现502 Bad Gateway问题求助
Nginx反向代理出现502 Bad Gateway问题求助
兄弟,我帮你捋捋你遇到的这个502问题,肯定是配置里的细节没踩对,跟你重装Nginx没啥关系~
你目前的情况是:直接把proxy_pass写死成http://example.com就正常,但用URL参数里的$arg_url当目标就报502,对吧?问题的核心原因是Nginx用变量作为proxy_pass目标时,不会自动调用系统DNS解析域名。
为啥写死就正常?因为Nginx启动时会直接解析http://example.com的IP并缓存下来;但用变量的话,每次请求都要实时解析目标域名,可你没给Nginx指定DNS服务器,它根本不知道该找谁查IP,自然就返回502了。
给你改好的配置,直接替换原来的location /getthe/块就行:
location /getthe/ { set $target_url $arg_url; if ($target_url = "") { return 400 "No target URL specified"; } # 指定DNS服务器,这里用公共DNS,也可以换成你本地的DNS地址 resolver 8.8.8.8 valid=300s; # 把目标域名的Host头正确传递过去,避免目标服务器拒绝请求 proxy_set_header Host $host; # 临时关闭缓冲,方便调试,稳定后可以根据需求开启 proxy_buffering off; proxy_pass $target_url; }
还有几个要注意的点:
- 如果你的目标URL是HTTPS协议,记得加上
proxy_ssl_server_name on;,不然可能会出现SSL握手失败的问题 - 要确保Nginx服务器能正常访问你指定的DNS服务器,防火墙别挡住了UDP 53端口的请求
- 这种动态代理的配置风险很高,很容易被滥用成代理跳板,建议后续加上白名单,限制只能代理你允许的域名
备注:内容来源于stack exchange,提问作者PeppersONLY
相关产品推荐
相关产品推荐

