常见原因
-
后端服务宕机或未启动
• Nginx 作为反向代理时,若后端应用服务器(如 Tomcat、Node.js、PHP-FPM 等)未运行或崩溃,会导致 503。
• 排查方法:检查后端服务状态、日志及端口监听情况(如netstat -tuln | grep <端口>
)。 -
连接后端服务失败
• 网络问题、防火墙规则、端口配置错误或后端服务无响应(如超时)。
• 排查方法:使用telnet
或curl
测试能否访问后端服务(如curl -v http://后端IP:端口
)。 -
资源过载(CPU/内存耗尽)
• 服务器资源(内存、CPU、连接数)耗尽,导致无法处理新请求。
• 排查方法:通过top
、htop
、free -h
检查系统资源使用情况。 -
Nginx 配置错误
•proxy_pass
或fastcgi_pass
指向错误的地址/端口,或负载均衡配置问题。
• 排查方法:运行nginx -t
检查配置语法,确认upstream
或proxy_pass
配置正确。 -
请求超出限制
• 若配置了速率限制(limit_req
、limit_conn
),超出阈值会返回 503。
• 排查方法:检查 Nginx 配置中是否启用了限流规则。 -
SSL/TLS 配置问题
• 证书过期、配置错误或 SSL 握手失败可能导致间接的 503 错误。
• 排查方法:检查证书路径、权限及 SSL 协议配置(如ssl_certificate
和ssl_certificate_key
)。
或者是 协议错误 本来是支持https 协议的域名 使用http访问的 导致错误
在这里我遇到的错误则是docker创建时使用的镜像不对导致的,这里阿里云上的镜像没有正常起作用,还是使用的官方镜像管用的。
https://docker.xuanyuan.me/
https://dockers.xuanyuan.me/image/library/nginx
🛠️ 排查步骤
-
检查 Nginx 错误日志
tail -f /var/log/nginx/error.log
• 查找与
upstream
、connection refused
、timeout
相关的错误信息。 -
验证后端服务状态
• 确认后端服务正在运行并监听端口:systemctl status <服务名> # 如 php-fpm、tomcat netstat -tuln | grep <端口>
-
测试后端连通性
• 从 Nginx 服务器发起请求,测试是否能访问后端:curl -I http://后端IP:端口 telnet 后端IP 端口
-
检查资源使用情况
• 使用top
、htop
查看 CPU/内存占用,df -h
检查磁盘空间。 -
验证负载均衡配置
• 如果使用upstream
,检查后端服务器列表和健康状态:upstream my_backend { server 192.168.1.10:8080 max_fails=3 fail_timeout=30s; server 192.168.1.11:8080 backup; # 检查是否有备用服务器 }
-
调整超时和缓冲设置
• 在 Nginx 配置中增加超时时间:proxy_connect_timeout 60; proxy_read_timeout 60; proxy_send_timeout 60;
-
检查限流规则
• 确认limit_req_zone
或limit_conn_zone
配置是否过严:http { limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s; }
-
重启服务
• 重启 Nginx 及后端服务:systemctl restart nginx <后端服务名>
📌 快速修复建议
• 临时恢复:重启后端服务或 Nginx。
• 扩容:若资源不足,增加服务器配置或启用负载均衡。
• 优化配置:调整超时时间、连接池大小(如 PHP-FPM 的 pm.max_children
)。
如果问题仍存在,建议结合日志和监控工具(如 Prometheus + Grafana)进一步分析瓶颈。