Nginx 反代报 503?别慌,排查思路都在这了
最近在折腾 Nginx 反向代理,配置好后端服务明明跑着好好的,浏览器一访问却给我甩了个脸色——503 Service Unavailable。这报错看着让人头大,毕竟后端服务是通的,为什么 Nginx 就说不可用呢?
其实遇到 503 错误,别急着重启服务,冷静下来按照这个思路排查,通常十分钟内就能找到病灶。今天就把这套排查流程整理出来,分享给同样在踩坑的朋友们。
一、先确认后端是不是真的“通”
很多时候我们觉得后端正常,是因为在本机或者内网环境下访问没问题,但 Nginx 所在的服务器网络环境可能不同。
第一步:直接通后端端口试试
别光在浏览器看,直接登录到安装 Nginx 的服务器上,用 curl 命令直接访问后端地址:
curl -I http://127.0.0.1:你的后端端口
# 或者
curl -I http://后端服务器IP:端口
如果这里直接报错或者超时,那问题肯定出在后端服务或者网络链路上(比如防火墙拦截),跟 Nginx 配置关系不大。如果这里返回 200 OK,那说明链路是通的,锅就得让 Nginx 背了,接着往下看。
二、检查 Nginx 错误日志(最重要!)
千万别瞎猜,Nginx 的 error.log 里通常会有最直接的线索。日志文件一般在 /var/log/nginx/error.log,用 tail 命令实时监控一下:
tail -f /var/log/nginx/error.log
然后刷新你的页面,看看日志里吐出了什么。
- 如果是
connect() failed (111: Connection refused):说明 Nginx 根本连不上后端。检查 Nginx 配置里的proxy_pass地址写对了吗?后端服务真的在监听那个 IP 和端口吗? - 如果是
connect() failed (110: Connection timed out):连上了但是没反应,可能是后端处理太慢,或者有云服务商的安全组/防火墙把连接掐断了。 - 如果是
upstream prematurely closed connection:后端主动把连接关了,可能是后端程序崩了,或者是 Nginx 发送的 Header 太大被后端拒收。
三、常见配置坑位
n
1. Header 头部大小限制
有些后端应用(比如一些 API 或者复杂的网站)返回的 Header 比较大,或者转发时带了一堆 Cookie。如果 Nginx 默认的缓冲区不够,就会 503。
试试在 http、server 或 location 块里加上:
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
2. 超时设置太短
如果你的后端业务比较重,处理一个请求需要好几秒,而 Nginx 默认超时时间只有 60 秒,也会导致 503。适当调大超时时间:
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
四、SSL/HTTPS 的特殊坑
评论区有朋友提到“开启 HTTPS,配置 SSL 证书”,这确实是一个高频坑点。
如果你开启了 HTTPS 反代(Nginx 是 HTTPS),但后端依然是 HTTP,通常需要加上:
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;
特别是 X-Forwarded-Proto,很多后端框架(如 Django, WordPress 等)会检测这个头来判断是否是 HTTPS,如果没设置好,后端可能会重定向或者直接拒绝响应,让你误以为是 503。
此外,如果你的 Nginx 要去反代一个 HTTPS 的后端源站,你需要配置好 CA 证书验证,或者临时关闭验证(仅测试用):
proxy_ssl_server_name on;
# proxy_ssl_verify off; # 测试环境下可以用这个跳过证书验证
五、后端服务本身罢工
虽然你说后端服务正常,但在高并发或者处理特定请求时,后端进程可能会崩溃或进入死锁。
- 检查后端服务的资源占用(CPU、内存),是不是 OOM 了?
- 如果是 Docker 容器,看看容器是不是反复重启?
- 数据库连接池是不是满了?导致后端无法建立新连接。
总结一下
遇到 503,排查顺序建议是:
- 本地 curl 后端,排除网络和后端假死问题。
- 看 Nginx error.log,定位是连接拒绝、超时还是连接中断。
- 检查超时和缓冲区配置,尤其是大文件传输或慢速接口。
- 确认 Header 转发设置,特别是 HTTPS 相关的头部。
希望能帮你省下几个抓头发的夜晚!如果你还有其他奇奇怪怪的报错,欢迎在评论区交流。

评论已关闭