V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
Livid
V2EX  ›  NGINX

nginx -s reload 但是新配置经常不生效,可能会有哪些原因呢?

  •  
  •   Livid · 2018-12-27 02:56:01 +08:00 · 16202 次点击
    这是一个创建于 1918 天前的主题,其中的信息可能已经有所发展或是发生改变。
    29 条回复    2018-12-27 23:13:11 +08:00
    Trim21
        1
    Trim21  
       2018-12-27 03:26:49 +08:00
    遇到过几次, 是有配置写错了, 但是 nginx -s reload 的时候没有把错误报出来. 手动关闭 nginx 再启动的时候才看到报错信息.
    ericls
        2
    ericls  
       2018-12-27 03:28:12 +08:00 via iPhone
    @Trim21 先 nginx -t
    MrGba2z
        3
    MrGba2z  
       2018-12-27 03:40:36 +08:00 via Android
    先用-t 测试下配置文件

    -s 失败就会继续用老的
    Showfom
        4
    Showfom  
       2018-12-27 03:47:04 +08:00
    可能当前进程太多了导致没 reload 上吧,试试 force-reload

    systemctl force-reload nginx
    ericFork
        5
    ericFork  
       2018-12-27 05:28:52 +08:00
    看看是不是有一些 worker 仍然还在处理当前未完请求( shutting down 状态)
    Actrace
        6
    Actrace  
       2018-12-27 07:19:55 +08:00   ❤️ 6
    挂了第三方模块无法结束进程或者是当前进程尚未结束。
    nginx -s reload 是平滑重启,不会强制结束正在工作的连接,需要等所有连接都结束才会重启。
    Cbdy
        7
    Cbdy  
       2018-12-27 07:32:56 +08:00 via Android
    有的操作要重启才能生效
    quqiuzhu
        8
    quqiuzhu  
       2018-12-27 08:30:13 +08:00 via Android
    没有 sudo 么
    raycloud
        9
    raycloud  
       2018-12-27 08:56:41 +08:00 via Android
    跟配置类型有关吧,之前遇到过某个配置必须重启才生效,忘记是哪个了
    ihipop
        10
    ihipop  
       2018-12-27 09:01:42 +08:00 via Android
    以前遇到过,新增端口监听,域名绑定新虚拟主机之类的,需要完整重启,看什么类型的操作,不是所有的都可以 reload 加载
    aniua
        11
    aniua  
       2018-12-27 09:01:52 +08:00   ❤️ 2
    -s reload 类似于 apache 的 graceful。
    配置文件错误会报错,旧的 worker 还是一样跑,就像没 reload 一样。
    正确的话就会开新 worker,把新的请求给到新 worker,旧的 worker 不再接收新连接,等所有连接结束后旧的 worker 会退出。
    如果配置没有生效说明你可能是通过未 reload 前已经保持的长连接发起的请求。
    0312birdzhang
        12
    0312birdzhang  
       2018-12-27 09:03:22 +08:00 via iPhone
    pid 丢了?
    linchengzzz
        13
    linchengzzz  
       2018-12-27 09:07:08 +08:00
    先 nginx -t 查看配置文件,等 配置文件 successful 之后 再 nginx -s reload
    Taosky
        14
    Taosky  
       2018-12-27 09:14:22 +08:00
    证书好像要 force-reload
    ooeyunarika
        15
    ooeyunarika  
       2018-12-27 09:19:09 +08:00
    旧的 worker 进程还在处理请求,有些第三方模块会导致旧的 worker 挂起甚至僵尸,回收不了,还有就是 nginx -t 先检查配置再 reload
    kernel
        16
    kernel  
       2018-12-27 09:29:03 +08:00
    reload 不会打印错误,而是静默失败,这个太坑爹了
    kran
        17
    kran  
       2018-12-27 09:30:13 +08:00 via Android
    配置文件正确也会有这种情况,遇到了只好重启,不清楚原因
    mywaiting
        18
    mywaiting  
       2018-12-27 09:30:32 +08:00   ❤️ 1
    每次 nginx reload 记得这样敲命令,反正我觉得这是 nginx reload 的最佳实践了

    sudo nginx -t && sudo nginx -s reload && sudo tail -f /var/log/nginx/error.log

    可以直接搞个命令的 alias,不过一定记得这样敲
    he583899772
        19
    he583899772  
       2018-12-27 09:42:14 +08:00
    配置有错误,看不到错误吧
    virusdefender
        20
    virusdefender  
       2018-12-27 09:57:22 +08:00
    reload 的时候得所有的连接都断开,老连接老配置,新连接才是新配置
    khy
        21
    khy  
       2018-12-27 10:01:09 +08:00
    碰到过几次,都是配置写错[捂脸],可以-t 先。
    TrickWu
        22
    TrickWu  
       2018-12-27 10:01:43 +08:00
    没遇到过,一般 reload 之后如果有错的话会报错 没报错就生效了。
    cominghome
        23
    cominghome  
       2018-12-27 10:08:04 +08:00
    一些改动,reload 貌似是不生效的,一定要 restart。
    NsLib
        24
    NsLib  
       2018-12-27 10:09:43 +08:00   ❤️ 1
    分两种情况:
    1. nginx -t 不通过,此时 nginx -s reload 不会生效
    2. nginx -s reload 是 graceful shutdown 语义;
    如果配置正确的话, 老的 worker 进程停止 accept 新连接, 处理完当前连接后主动退出;
    新 worker 处理新请求

    看你描述的经常不生效,应该是没有 nginx -t 导致的
    Infernalzero
        25
    Infernalzero  
       2018-12-27 13:40:00 +08:00
    你们说的-t 问题其实可以忽略,这种一般 reload 后都马上看提示就知道的了,我估计楼主说的是 reload 了没有错误信息,配置没有语法错误,但是没有使用新的配置。
    这种情况只能 stop 了以后再起才生效
    daydaydayup
        26
    daydaydayup  
       2018-12-27 14:28:28 +08:00 via iPhone
    跟进这个帖子,希望知道最后的解决方法以后少填坑
    justicelove
        27
    justicelove  
       2018-12-27 14:32:26 +08:00
    先 -t 检测配置是否正确
    firebroo
        28
    firebroo  
       2018-12-27 21:01:04 +08:00 via Android
    我也遇到过一次,是在大版本升级的时候,没来得及保留现场,lz 如果可以稳定复现,可以看看各 worker 的 pid 是否变化?
    Livid
        29
    Livid  
    MOD
    OP
       2018-12-27 23:13:11 +08:00
    看起来最大的嫌疑就是那些涉及额外网络连接的模块,我排查一下。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3034 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 12:47 · PVG 20:47 · LAX 05:47 · JFK 08:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.