Google Cloud Ubuntu 16.04环境下Nginx代理配置报错:域名解析失败及502 Bad Gateway问题求助
解决Nginx反向代理的"No resolver defined"和502错误
首先,你的核心问题是Nginx配置的语法错误,加上resolver和反向代理的配置细节问题,我们一步步来解决:
1. 修正配置的语法错误
你当前的配置把resolver和proxy_pass写在了同一行,这会让Nginx误以为proxy_pass是resolver要解析的主机名,直接导致启动报错host not found in resolver "proxy_pass"。必须把这两个指令分成单独的行。
2. 正确的配置示例
针对Google Cloud Ubuntu 16.04环境,推荐使用Google内部DNS(169.254.169.254,这是Cloud VM默认的可靠DNS服务器),同时加上HTTPS反向代理的必要配置:
server { listen 80 default_server; listen [::]:80 default_server; server_name pivot.staging.ippen.space; # 使用Google Cloud内部DNS,设置缓存有效期300秒 resolver 169.254.169.254 valid=300s; # 也可以用公共DNS:resolver 8.8.8.8 8.8.4.4 valid=300s; location / { # 反向代理到目标HTTPS服务,带上完整的请求URI proxy_pass https://$server_name:443$request_uri; # 针对HTTPS反向代理的关键配置 proxy_ssl_server_name on; # 确保SNI正确发送 proxy_ssl_protocols TLSv1.2 TLSv1.3; # 启用安全的TLS版本 proxy_set_header Host $host; # 传递原始主机头给后端服务 proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 传递原始协议(HTTP) } }
3. 排查步骤
步骤1:验证配置语法
修改配置后,先执行以下命令检查语法是否正确:
sudo nginx -t
如果输出nginx: configuration file /etc/nginx/nginx.conf test is successful,说明配置没问题。
步骤2:重启Nginx服务
sudo systemctl restart nginx
步骤3:测试DNS解析
在VM实例上测试resolver是否能正常解析你的目标域名:
dig pivot.staging.ippen.space @169.254.169.254
如果能返回目标域名的IP地址,说明DNS解析正常;如果不行,检查VM的网络配置,确保出站DNS请求没有被防火墙拦截。
步骤4:测试后端服务连通性
在VM上直接访问目标服务,看是否能正常响应:
curl -v https://pivot.staging.ippen.space
如果无法访问,需要检查:
- Google Cloud防火墙是否允许VM实例出站访问443端口(默认是允许的,但如果有自定义规则可能受限)
- 目标服务的防火墙是否允许你的VM实例IP访问
步骤5:检查Nginx日志
如果还是有错误,查看详细日志:
tail -f /var/log/nginx/error.log
根据新的错误信息进一步排查(比如后端服务超时、SSL证书问题等)。
额外注意点
- 确保
/etc/nginx/sites-enabled/目录下只有你的custom_server.conf链接,避免和默认配置冲突 - 如果目标服务是Google Cloud内部服务(比如另一台VM或Cloud Run服务),可以直接使用内部IP或内部域名,避免DNS解析问题
内容的提问来源于stack exchange,提问作者doksha
相关产品推荐
相关产品推荐

