NodeJS+EJS站点刷新触发Nginx 502 Bad Gateway错误求助
解决方案:刷新页面出现502 Bad Gateway的排查与修复
1. 检查NodeJS服务状态
首次访问正常但刷新失败,大概率是Node服务启动后意外崩溃,先确认服务运行状态:
- 执行
pm2 list查看服务状态,确保状态为online - 执行
pm2 logs查看Node服务日志,排查是否有未捕获异常、文件缺失、资源不足等报错
2. 验证端口8000的监听情况
确认Node服务确实在监听8000端口:
- 执行命令:
ss -tulpn | grep 8000 - 如果输出中没有你的Node进程,说明服务未正常启动或端口被占用:
- 用
kill -9 [占用端口的进程PID]杀掉占用进程 - 执行
pm2 restart [你的服务名称]重启Node服务
- 用
3. 修正Nginx配置问题
编辑你的Nginx配置文件(通常路径为/etc/nginx/sites-available/www.example.com),做以下调整:
3.1 统一IPv4/IPv6代理目标
将proxy_pass地址从http://127.0.0.1:8000/改为http://localhost:8000/,或在Node代码中把监听地址设为0.0.0.0(同时支持IPv4和IPv6)
3.2 关闭静态资源目录索引(安全优化)
把所有autoindex on改为autoindex off,避免暴露服务器目录结构
3.3 清理重复的请求头配置
去掉外层的proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;,保留location /内的对应配置即可
修改后的完整配置示例:
server { listen 80; listen [::]:80 ipv6only=on default_server; server_name www.example.com example.com; location / { proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $http_host; proxy_pass http://localhost:8000/; proxy_http_version 1.1; proxy_set_header "Connection" ""; proxy_set_header Upgrade $http_upgrade; client_max_body_size 20m; proxy_read_timeout 600s; } location ^~ /css { autoindex off; alias /home/saidjillo/webcitey/public/css; } location ^~ /media_query { autoindex off; alias /home/saidjillo/webcitey/public/css/media_query; } location ^~ /js { autoindex off; alias /home/saidjillo/webcitey/public/js; } location /images { autoindex off; alias /home/saidjillo/webcitey/images; } }
4. 重启服务生效
- 执行
sudo nginx -t检查配置合法性,无报错后执行sudo systemctl reload nginx - 执行
pm2 restart [你的服务名称]重启Node服务
关于日志中的/mysqladmin/请求
这类请求属于恶意扫描,你的站点无对应路径,因此Nginx返回错误,属于正常情况,后续可通过防火墙或Nginx规则拦截此类扫描。
内容的提问来源于stack exchange,提问作者Seyyid Said
相关产品推荐
相关产品推荐

