如何配置Linode NodeBalancer+NGINX反向代理Node.js应用解决502错误
问题排查与修复方案
核心问题分析
出现502 Bad Gateway且日志显示Permission denied,本质是NodeBalancer的私有IP无法访问服务器上的3000端口,大概率是两个原因导致:Node.js应用仅绑定本地回环地址,或防火墙拦截了私有IP段的访问请求。
修复步骤
1. 修改Node.js应用监听地址
确保应用不是仅绑定127.0.0.1(仅允许本地访问),改为绑定0.0.0.0(允许所有网卡接口访问)或服务器的私有IP:
// 示例Node.js代码调整 app.listen(3000, '0.0.0.0', () => { console.log('应用运行在0.0.0.0:3000'); });
修改后重启Node.js应用。
2. 配置防火墙允许私有IP段访问3000端口
Linode的私有IP段为192.168.0.0/16,需添加规则允许该网段访问3000端口:
- 若使用ufw防火墙:
ufw allow from 192.168.0.0/16 to any port 3000 ufw reload
- 若使用iptables防火墙:
iptables -A INPUT -s 192.168.0.0/16 -p tcp --dport 3000 -j ACCEPT # 保存规则(Debian/Ubuntu系统示例) iptables-save > /etc/iptables/rules.v4
3. 优化NGINX配置
当前配置的server_name仅匹配www.adamhelm.com,但用户访问的是adamhelm.com,需补充该域名;同时可将proxy_pass指向服务器私有IP,避免公网IP解析问题:
listen 443; server_name adamhelm.com www.adamhelm.com; location / { proxy_pass http://192.168.xxx.xxx:3000; # 替换为你的服务器私有IP proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; }
修改后重启NGINX:systemctl restart nginx
验证
访问https://adamhelm.com和https://www.adamhelm.com,检查是否正常加载应用;同时查看NGINX日志,确认无Permission denied错误。
内容的提问来源于stack exchange,提问作者adamfhelm
相关产品推荐
相关产品推荐

