nginx重启./nginx -s reload和systemctl restart nginx.server区别

nginx重启./nginx -s reload和systemctl restart nginx.server区别背景 生产的网关代理 NGINX 在修改配置后重启 reload 后 不能加载新配置 在 error log 及系统日志文件 var log message 中没有发现相关日志 同时还发现个别以前的配置的代理 curl URL 后 总是 302 报错

大家好,欢迎来到IT知识分享网。

背景:

生产的网关代理NGINX,在修改配置后重启reload后,不能加载新配置,在error.log 及系统日志文件/var/log/message中没有发现相关日志。
同时还发现个别以前的配置的代理 curl URL 后,总是302 报错。但是在测试环境缺没有报错。

处理:

./nginx -s reload 是无效的,这种方式重启PID是不变的【ps -ef |grep master】

又不能 ./nginx -s stop ,应为生产有主备KEEPALIVE模式,手动停掉再重启,不但要申请停机时间,可能也会VIP漂移。当然最后还是向领导申请了。

最后想到之前配置的开机重启的配置sysytem start nginx.server [具体配置内容在文章后面]

采用这个方式重启可能会快些。但是没想到这种方式的重启和reload是不通的

它过程是开启–》停STOP–》开启

sysytem restart nginx.server 完全重启 Nginx 服务

这个问题重启后问题解决。新配置的配置都好使了。这个诡异的事件,我认为是bug,但是网上的人说是长连接问题,也有人说是缓存问题。

重启过程差异

./nginx -s reload 和 systemctl restart nginx.service 是两种不同的方式来重启 Nginx 服务,下面详细介绍它们的区别:

  • ./nginx -s reload平滑重启:此命令会触发 Nginx 的平滑重启机制。Nginx 主进程在收到 reload 信号后,会尝试解析新的配置文件,如果解析成功,会启动新的工作进程,并逐步关闭旧的工作进程,期间不会中断正在处理的连接,保证服务的连续性。配置加载:主要目的是重新加载配置文件,使新的配置生效,而不会重新启动整个 Nginx 服务。
  • systemctl restart nginx.service完全重启systemctl restart 命令会先停止 Nginx 服务,然后再重新启动它。在停止过程中,所有正在处理的连接都会被中断,直到服务重新启动完成。服务管理:不仅会重新加载配置文件,还会重新初始化整个 Nginx 服务,包括重新读取所有的系统环境变量、重新创建进程等

配置

[root@master ~]# cat /usr/lib/systemd/system/nginx.service

[Unit]

Description=nginx server 1.24.0

After= network-online.target local-fs.target

[Service]

Type=forking

ExecStart=/usr/local/nginx-1.24.0/sbin/nginx

ExecStop=/usr/local/nginx-1.24.0/sbin/nginx -s stop

ExecReload=/usr/local/nginx-1.24.0/sbin/nginx -s reload

PrivateTmp=true

[Install]

WantedBy=multi-user.target

systemctl enable nginx.server

systemctl status nginx

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/175479.html

(0)
上一篇 2025-04-05 07:45
下一篇 2025-04-05 08:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信