Nginx 502 http error + 防火墙问题排查实

在最近一次服务器部署中,我遇到一个很棘手的问题:通过域名访问 Nginx 站点时出现 502 Bad Gateway,而本地访问却正常。经过排查,我发现问题与防火墙和代理有关,整个过程总结如下。
问题描述

域名:tcoin1.xyz

Nginx 配置正确,能在本地访问 /index.html

外网访问时却返回:

502 Bad Gateway

服务器上 curl -I http://localhost 正常返回 200 OK

使用浏览器或手机访问域名时,在开启翻墙工具的情况下无法访问,但关闭翻墙后正常

初步分析

502 错误通常由以下原因引起:

Nginx 配置的上游服务不可用或拒绝连接

代理或防火墙阻止了请求

HTTP 请求头缺少必需的 Host 字段

结合实际情况发现:

本地访问 Nginx 正常 → Nginx 本身工作正常

外网访问受影响 → 网络或防火墙问题

开启代理/翻墙访问出现问题 → 请求头或防火墙可能阻止了连接

Nginx 配置检查

Nginx 代理配置示例:

location ~ ^/(api|login|ws|trade|openapi) {
proxy_pass http://127.0.0.1:8000;
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_set_header X-Forwarded-Proto $scheme;
}

✅ 关键点:

proxy_set_header Host $host; 确保 Host 头正确传递

上游服务端口 8000 必须可访问

防火墙排查

使用 CentOS 自带 FirewallD:

查看防火墙状态:

sudo firewall-cmd --state

not running 或 running

列出已开放端口:

sudo firewall-cmd --list-all

确保开放端口:

HTTP/HTTPS:80/443

后端服务端口:8000(仅本地访问或外网访问根据需求)

启用防火墙并设置默认规则:

sudo systemctl start firewalld
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --zone=public --add-rich-rule=‘rule family=“ipv4” source address=“127.0.0.1/32” port protocol=“tcp” port=“8000” accept’ --permanent
sudo firewall-cmd --reload

防火墙状态确认:

sudo firewall-cmd --list-all

域名解析检查

确认域名解析到服务器公网 IP:

nslookup tcoin1.xyz

如果解析不正确,需要修改 DNS 记录

如果解析正确,但外网仍无法访问,可能是云服务提供商安全组或本地防火墙阻止了访问

关键问题总结

502 Bad Gateway 并不一定是 Nginx 配置错误

本例中,问题根源是防火墙未开启或规则不完整,导致 Nginx 无法与上游服务建立连接

启用防火墙并添加必要端口规则后,问题解决

代理工具或翻墙软件可能会改变请求头,务必保证 Host 头正常

最终解决方案

Nginx 配置保持原样,确保 proxy_set_header Host $host

启用防火墙,开放 80/443 端口,允许本地访问 8000

检查域名解析,确认公网 IP 正确

本地测试成功后,外网访问正常

小结

遇到 Nginx 502 错误时,排查顺序建议:

本地访问 Nginx 是否正常

上游服务端口是否开放并运行

防火墙是否阻止访问

DNS 解析是否正确

请求头是否缺少 Host

通过这个案例,可以看到防火墙和代理设置在排查 502 问题时的重要性。
最后发现可能是宝塔端口问题,关闭端口就正常了,真实头大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值