You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不中断客户端活跃连接的情况下重新加载Nginx配置?

Nginx 不中断活跃连接平滑重载配置方法
  • 先澄清一个关键误区:systemctl reload nginx 或 sudo nginx -s reload 本身就是平滑重载操作,不会直接断开活跃连接——旧worker进程会处理完手头的请求后再优雅退出,新worker进程会用新配置启动承接新请求。你之前遇到连接被强制断开,问题出在操作方式或配置参数上,不是命令本身的问题。

  • 修复错误操作:
    你用sudo pkill -HUP nginx会把HUP信号发给所有nginx进程(包括worker),导致worker直接中断当前请求退出,这才是连接断开的根源。正确的做法是只给nginx主进程发HUP信号:

    sudo kill -HUP $(cat /var/run/nginx.pid)
    

    或者直接用官方推荐的重载命令:

    sudo nginx -s reload
    
  • 调整配置确保长连接不中断:
    如果你的业务涉及长连接(比如WebSocket、API长轮询),需要在nginx.conf里补充相关配置,避免重载时连接被意外断开:

    # 全局或server块内设置长连接超时
    keepalive_timeout 65;
    # 允许单个长连接处理的请求数
    keepalive_requests 1000;
    
    # 反向代理场景需额外配置后端keepalive
    upstream your_backend {
        server 192.168.1.10:8080;
        keepalive 32; # 维持与后端的空闲连接数
    }
    
    server {
        listen 80;
        server_name your_domain.com;
    
        location /api {
            proxy_pass http://your_backend;
            proxy_http_version 1.1;
            proxy_set_header Connection ""; # 清空Connection头,复用长连接
        }
    }
    
  • 替代方案(无需重载即可更新配置):

    • 用OpenResty:借助Lua脚本动态加载路由或server配置,无需触发nginx重载,完全不影响现有连接。
    • 灰度部署:先启动一批使用新配置的worker进程,逐步关闭旧worker,比如临时调整worker_processes数量,通过端口转发分流请求,验证无误后再切换全量配置。

内容的提问来源于stack exchange,提问作者Roberto Nervo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 03:25:32