大家好,今天来介绍nginx重启命令reload后进程会变吗(nginx工作进程未正常重启带来的问题有哪些)的问题,以下是渲大师小编对此问题的归纳和整理,感兴趣的来一起看看吧!
nginx 修改配置需要重启吗
修改完nginx配置后,需要使用nginx -s reload
使修改扮塌的配置生效,配厅碧圆置生效是平滑的慧稿,不会对访问产生任何影响
reload后会启动新的进程接受新请求,对于未处理完的请求还是用老的配置,直到请求处理完毕,老的进行会退出
Nginx工作进程未正常重启带来的问题
公司新上线了一个系统,通过Nginx进行反向代理,系统上线后,偶尔有请求出现请求找不到,响应 404 的问题。仅新系统会出现该问题,以前部署的系统没有;错误的请求随机出现,并不固定为某个特定的请求地址。Nginx部分配置如下:
跟踪日志发现无论全局错误日志还是新系统错误日志中,都没有对应记录,新系统访问日志中只有正常请求的记录,没有错误的记录。错误请求只有在全局访问日志文件中才有记录。最终在查看Nginx进程状态时,竟发现多了4个工作进程。
仔细观察发现多出来的进程是很久以前启动的了,执行 nginx -s reload 命令,异常进程也不会终止,于是猜测错误请求是由异常的进程在处理,而异常的进程是很久以前启动的,并没有加载新系统的配置文件,导致报错,同时这也源简是为什么错误记录只存在全局访问日志中的原因。 kill 掉异常进程后,果然没有再出现 404 的问题了。
至于Nginx进程出现异常的原因我就没有再深究了,网上有人不建议使用 nginx -s reload 命令重启nginx,有时候会雹升裤无效,公司Nginx在不久做过升级,或许是升级操作不当导致的也说不定。笑简
nginx重载原理
nginx重载原理是:向master进程发送HUP信号(reload命令)、master进程检查配置语法是否正确master进程打开监听端口(在修改配置文件的端口情况下,可能)。
master进程使用新的配置文件启动新的worker子进程,master进程向老的worker子进程发送QUIT信号,旧的worker进程关闭监听句柄,处理完当前连接后关闭进程。
左边绿色的状态是执行nginx -s reload命令之前的状态,按照我个人主机的配置时一个master进程和4个worker子进程。
为了模拟执行nginx -s reload命令后原来的worker进程会处理完请求后再被杀掉,我模拟一个需要很久才能处理完任务并响应的接口。
是的在代码里sleep 15秒,也就是说渗橘掘这个接口响应需要15秒,时间弄长点方便我们来观察中间态,注意,伍笑在执行reload命令前请求该接口。
nginx的模块是:
Nginx的模块从结构上分为核心模块、基础模块和第三方模块:
核心模块:HTTP模块、EVENT模块和MAIL模块。
基础模块:HTTP Access模块、HTTP FastCGI模块丛核、HTTP Proxy模块和HTTP Rewrite模块。
第三方模块:HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块。
linux下如何重启nginx
在nginx的早期版本,nginx重启需要通过kill命令向nginx发送信号来实现nginx的重启。
但是,现在,nginx增加了-s选项,实现nginx的停止,重新加载功能。
1. 如果是平滑的重启nginx,可以用./nginx -s reload命令实现nginx的平滑重启。
2. 如果是非平滑重启,则可以先停止nginx,然后再启动:
./nginx -s stop && ./nginx
当我们修改nginx配置后,希望重启nginx以激陵便让nginx生效,此时为了保证nginx在重启阶段还能够提供正常的服务,芹卖一般采用平滑重启的方式(reload)重启nginx。此时,nginx会加载新的配置,然后fork出新的worker进程。同时,master进程会向老的worker进程发送信号,告诉老的worker进程当前的情况。老的worker进程受到master进程的信号后,如果当时没有处理请求则会退出,如果正在处理请求,则老的worker进程会处理完请求然后退出。nginx就是通过这种方式去reload新的配置,嫌铅逗从而使得在重启的过程中,仍然可以提供服务。
centos7 下 nginx 启动关闭重启配置
打开这个教程: EA82.COM
启动 nginx
systemctl start nginx
一旦 nginx 启动后,就可以用nginx -s signal 命令来接管
快梁凯速关闭 nginx
nginx -s stop
平滑的关闭 nginx
nginx -s quit
重启 nginx
nginx -s reload
分割日志
nginx -s reopen
nginx 的工作原理
nginx 有一个 master 进程(老板)和多个 worker 进程(工人),master 进程负责阅读和评估配置,给 worker 进程提供保障,worker 进程实际处理请求。
nginx -s reload 命令加载修改后的配置文雀启件, 命令下达后发生如下事件
Nginx 的 master 进程检查配置文件的正确性,若是错误则返回错误信息,nginx 继续采用原配置文件进行工作(因为 worker 未受到影响)
Nginx 启动新的 worker 进程,采用新的配置文件
Nginx 将新的请橡岁唤求分配新的 worker 进程
Nginx 等待以前的 worker 进程的全部请求已经都返回后,关闭相关 worker 进程
重复上面过程,直到全部旧的 worker 进程都被关闭掉。
nginx -s quit命令关闭 nginx 服务时,nginx 服务要等待工作进程将当前请求处理完才关闭。
也可以用 kill 命令杀死指定进程号的 nginx 进程
先通过 /var/run/nginx.pid 文件查看 nginx master 进程进程 id,
或者通过ps -axgrep nginx查看进程
在使用kill -s quit 进程号 杀死进程
本文地址:https://gpu.xuandashi.com/72049.html,转载请说明来源于:渲大师
声明:本站部分内容来自网络,如无特殊说明或标注,均为本站原创发布。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。分享目的仅供大家学习与参考,不代表本站立场!