Ubuntu服务器Nginx配置双Nuxt.js域名遇502 Bad Gateway错误排查
排查Nginx 502 Bad Gateway错误(多域名反向代理场景)
基础配置检查
- 验证Nginx配置语法:执行
nginx -t,若输出syntax is ok和test is successful则语法正常,否则根据提示修复语法问题(如括号不匹配、引号格式错误)。 - 确保配置生效:Nginx默认仅加载
/etc/nginx/sites-enabled/目录下的配置,需确认/etc/nginx/sites-available/default已创建软链接到该目录,执行命令:
完成后重启Nginx:ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/defaultsystemctl restart nginx
反向代理配置优化与验证
- 测试后端服务可达性:在服务器本地执行
curl http://127.0.0.1:8080和curl http://127.0.0.1:3000,若无法返回正常内容,说明后端服务监听地址可能不是127.0.0.1(如绑定了外网IP),需修改项目监听配置为0.0.0.0或127.0.0.1。 - 规范WebSocket代理配置:原配置中
proxy_set_header Connection 'upgrade'写法不够严谨,建议在http块中添加映射规则(若尚未添加),动态适配Connection头:
随后将每个server块中的map $http_upgrade $connection_upgrade { default upgrade; '' close; }proxy_set_header Connection 'upgrade';替换为:
该配置能兼容非WebSocket请求场景,避免不必要的连接异常。proxy_set_header Connection $connection_upgrade; - 补充代理头信息:添加两个头字段帮助后端获取真实客户端IP,优化服务兼容性:
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
权限与进程状态排查
- 确认后端服务运行状态:用
pm2 list查看两个项目的进程状态,确保8080、3000端口被正常占用且进程处于online状态。 - SELinux/防火墙检查:若为RHEL/CentOS系列服务器,临时关闭SELinux测试:
setenforce 0,若错误消失,执行setsebool -P httpd_can_network_connect 1永久开放Nginx网络连接权限;Debian/Ubuntu系列无需关注SELinux,本地回环端口一般不受防火墙拦截。
日志定位精准问题
查看Nginx错误日志获取具体报错原因:
tail -f /var/log/nginx/error.log
访问域名时观察日志,例如Connection refused说明后端服务未监听目标端口,No route to host表示网络连通性存在问题,根据日志提示针对性修复。
修正后的完整配置示例
# 在http块中添加(位于所有server块之外) map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 80; server_name domain1.com; location / { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_cache_bypass $http_upgrade; } } server { listen 80; server_name domain2.com; location / { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_cache_bypass $http_upgrade; } }
内容的提问来源于stack exchange,提问作者oztac
相关产品推荐
相关产品推荐

