Web 开发常见 HTTP 错误码解决方案
在使用反向代理(如 Nginx、HAProxy)或正向代理(如 Squid、Charles)时,经常会遇到各种 HTTP 错误码。本文将围绕以下几类常见问题,逐一分析成因并给出排查及解决思路:
- 502 Bad Gateway/503 Service Unavailable
- Connection reset/Connection timed out
- 504 Gateway Timeout
- 400 Bad Request
- 401 Unauthorized
- 403 Forbidden
502 Bad Gateway/503 Service Unavailable
问题表现
代理或网关返回 HTTP 502 或 503,前端收到类似:
HTTP/1.1 502 Bad Gateway
HTTP/1.1 503 Service Unavailable
根本成因
- 隧道建立失败:代理服务器拒绝为你建立隧道(CONNECT),导致无法转发请求到后端。
- 上游服务异常:后端应用进程挂死、重启中或者服务不可达。
- 资源过载:后端承载过大,无法及时响应。
排查与解决
- 检查隧道配置
- 对于 HTTPS 请求,代理必须支持
CONNECT方法。 - 在 Nginx 中确认有
proxy_connect与proxy_pass配置,并开启ssl_preread(TCP 代理)或正确的ssl配置。
- 对于 HTTPS 请求,代理必须支持
- 查看代理日志
- Nginx:
error_log /var/log/nginx/error.log notice; - Squid:
cache.log中查找拒绝隧道或连接错误。 - 若此处就报 502/503,则说明代理与后端链路已断。
- Nginx:
- 重启/扩容后端
- 确保后端进程健康;必要时水平扩容或加入健康检查(health check)。
- 限流与熔断
- 对高并发场景,可在代理层或服务层加限流,避免短时流量冲垮上游。
验证后端连通性
curl -v -x http://proxy:port https://your-upstream.example.com
Connection reset/Connection timed out
问题表现
- 客户端抛出
ECONNRESET(Connection reset)或ETIMEDOUT(Connection timed out)。
日志中看到:
Error: socket hang up
Error: connect


