插件窝 干货文章 nginx日志中的“upstream prematurely closed connection”怎么解决

nginx日志中的“upstream prematurely closed connection”怎么解决

上游 服务器 检查 timeout 673    来源:    2025-05-07

解决Nginx "upstream prematurely closed connection" 错误

问题分析

"upstream prematurely closed connection" 错误表示Nginx与上游服务器(如应用服务器、PHP-FPM、Node.js等)的连接被上游服务器意外关闭。这通常发生在:

  1. 上游服务器处理请求时间过长
  2. 上游服务器崩溃或异常终止
  3. 网络问题导致连接中断
  4. 上游服务器配置的超时时间比Nginx短

解决方案

1. 调整Nginx超时设置

在Nginx配置文件中增加或修改以下参数:

http {
    proxy_connect_timeout 60s;  # 与上游服务器建立连接的超时时间
    proxy_send_timeout 60s;     # 发送请求到上游服务器的超时时间
    proxy_read_timeout 60s;     # 从上游服务器读取响应的超时时间

    # 对于FastCGI (如PHP-FPM)
    fastcgi_connect_timeout 60s;
    fastcgi_send_timeout 60s;
    fastcgi_read_timeout 60s;

    # 对于uWSGI
    uwsgi_connect_timeout 60s;
    uwsgi_send_timeout 60s;
    uwsgi_read_timeout 60s;
}

2. 检查上游服务器配置

确保上游服务器的超时设置比Nginx长:

  • PHP-FPM: 检查request_terminate_timeoutrequest_slowlog_timeout
  • Node.js/Express: 检查服务器超时设置
  • Java/Tomcat: 检查连接器(connector)配置

3. 增加缓冲区大小

proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;

4. 启用连接保持

proxy_http_version 1.1;
proxy_set_header Connection "";

5. 检查上游服务器健康状况

  • 确保上游服务器有足够资源(CPU、内存)
  • 检查应用日志是否有错误或崩溃
  • 监控上游服务器的响应时间

6. 网络问题排查

  • 检查Nginx与上游服务器之间的网络稳定性
  • 检查防火墙设置是否中断了长连接
  • 考虑使用tcpdump或Wireshark分析网络流量

诊断步骤

  1. 检查Nginx错误日志获取更多上下文:tail -f /var/log/nginx/error.log
  2. 检查上游服务器日志
  3. 使用strace或类似工具监控上游服务器进程
  4. 如果是PHP应用,检查PHP-FPM慢日志

通过以上调整和诊断,应该能够解决或至少准确定位"upstream prematurely closed connection"问题的根本原因。