多个Nginx进程运行导致配置加载失效问题
多个Nginx进程运行导致配置加载失效问题
问题描述
在用nginx
进行接口代理时,修改配置文件后,重新加载nginx
,却发现无论怎么修改配置文件,都无法生效,接口一直无法代理成功。查看了之前做的接口代理,配置也并无二致,但代理是成功的,十分奇怪,进行问题排查。
问题排查
在保证接口可用,配置无错的情况下,进行以下过程排查:
-
使用
nginx -s reload
命令进行配置重载,配置不生效 -
使用命令重启
nginx
,配置不生效# 关闭nginx nginx -s stop # 开启nginx start nginx
-
删除之前可用配置,重启
nginx
,发现居然还能继续使用,说明修改的配置文件没有正确加载。 -
接着关闭
nginx
,再次访问网页也能正常响应,说明nginx
还在运行。 -
之后打开任务管理器查看服务进程,发现居然有4个正在运行的
nginx
进程,问题已经发现了。nginx
运行时应该只有2个nginx
进程(1个master
进程,1个worker
进程(默认配置是1个)),而关闭时则没有nginx
进程。
另:
nginx
在windows
上启动会有两个nginx.exe
进程,这是因为nginx
在windows
上使用了master-worker
模式。
master
进程负责监听端口,接收客户端的请求,并将请求分发给worker
进程处理。
worker
进程负责处理请求。处理传过来的客户端请求,并将处理结果返回给客户端。
所以可以推断出配置加载无法生效的原因了:windows
服务器上运行了多个nginx
进程,加载了旧配置的nginx
进程一直在运行处理请求和响应,而加载了新配置的nginx
虽然也在运行但没有进行请求的处理。修改的是加载了新配置的nginx
,但处理请求的是加载了旧配置的nginx
,所以造成了修改了配置文件但发现不生效的现象。
问题解决
通过查询资料与实验可知,每执行一次 start nginx
,都会创建新的nginx
进程,同时创建新的 nginx.pid
文件,但只有最先启动的 nginx
进程才会处理到请求。
知道了问题缘由就很好处理了。
- 先关闭所有的
nginx
服务进程 - 进入
nginx
目录,执行start nginx
命令启动服务 - 使用
nginx -s reload
重载修改后的配置文件
需要注意的是,之后要运行nginx
前需要确认原nginx
进程已关闭。
附录
nginx.pid
nginx.pid
是管理进程的重要文件之一,它记录着 nginx master
进程的进程id。
它的主要作用有:
- 记录着
nginx master
进程的进程id,管理nginx
进程 - 在关闭
nginx
服务时,需要用到nginx.pid
文件类终止相关进程,避免占用系统资源
本文来自博客园,作者:knqiufan,转载请注明原文链接:https://www.cnblogs.com/knqiufan/p/17676140.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本