多个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文件类终止相关进程,避免占用系统资源
多个Nginx进程运行导致配置加载失效问题的更多相关文章
- 深入理解 Laravel 中 config 配置加载原理
Laravel的配置加载其实就是加载config目录下所有文件配置.如何过使用php artisan config:cache则会把加载的配置合并到一个配置文件中,下次请求就不会再去加载config目 ...
- spring配置加载2次实例问题。
WEB.XML 中SPRING 配置及重复加载问题 Posted on 2012-11-13, 15:48, by tmser, under java 周边 . 项目内存溢出,mat 查看了一下发现s ...
- Expressjs配置加载器
有些东西就是操刀开干,没什么好解释的.... 问题引入 解决问题 直接上码 env.js index.js 使用方法 初始化 使用方法 写在最后 问题引入 大家都知道在日常的研发过程中,我们的程序会有 ...
- 字节码编程,Javassist篇三《使用Javassist在运行时重新加载类「替换原方法输出不一样的结果」》
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 通过前面两篇 javassist 的基本内容,大体介绍了:类池(ClassPool) ...
- 关于flume配置加载(二)
为什么翻flume的代码,一方面是确实遇到了问题,另一方面是想翻一下flume的源码,看看有什么收获,现在收获还谈不上,因为要继续总结.不够已经够解决问题了,而且确实有好的代码,后续会继续慢慢分享,这 ...
- 关于flume配置加载
最近项目在用到flume,因此翻了下flume的代码, 启动脚本: nohup bin/flume-ng agent -n tsdbflume -c conf -f conf/配置文件.conf -D ...
- Java实现配置加载机制
前言 现如今几乎大多数Java应用,例如我们耳熟能详的tomcat, struts2, netty…等等数都数不过来的软件,要满足通用性,都会提供配置文件供使用者定制功能. 甚至有一些例如Netty这 ...
- 异常处理之IIS配置加载出错
问题详情: 一台部署在海外服务器,在管理IIS过程中,出现问题 There was an error when trying to connect. Do you want > to rety ...
- Springboot学习01- 配置文件加载优先顺序和本地配置加载
Springboot学习01-配置文件加载优先顺序和本地配置加载 1-项目内部配置文件加载优先顺序 spring boot 启动会扫描以下位置的application.properties或者appl ...
- Java运行时动态加载类之ClassLoader
https://blog.csdn.net/fjssharpsword/article/details/64922083 *************************************** ...
随机推荐
- 线性代数 · 矩阵 · Matlab | Cholesky 分解代码实现
(搬运外网的代码,非原创:原网址 ) (其实是专业课作业,但感觉国内博客没有合适的代码实现,所以就搬运到自己博客了) 背景 - Cholesky 分解: 若 A 为 n 阶实对称正定矩阵,则存在非奇异 ...
- 【JavaWeb】JSP基础和应用
JSP基础 JSP简介 JSP全称是Java Server Page,它和Servlet一样,也是sun公司推出的一套开发动态web资源的技术,称为JSP/Servlet规范.JSP的本质其实就是一个 ...
- 05-逻辑仿真工具VCS-执行过程
Verilog Simulation Event Queue 主要了解VCS是如何处理交给它的代码的 Verilog的仿真事件队列,介绍VCS如何处理交给它的代码.VCS是Synopsys公司的,支持 ...
- Pycharm配置git
原文链接:https://www.jianshu.com/p/ae92970d2062 1.下载Gitee插件 同样在设置页面,选中 Plugins,并搜索 Gitee安装. 安装后,重启一下Pych ...
- C++ 语法结构--堆
1.堆介绍 「堆 heap」是一种满足特定条件的完全二叉树,主要可分为图 8-1 所示的两种类型. 「大顶堆 max heap」:任意节点的值 其子节点的值. 「小顶堆 min heap」:任意节点的 ...
- [转帖]tidb数据库5.4.3和6.5.3版本性能测试对比
https://tidb.net/blog/5454621f 一.测试需求: 基于历史原因,我们的业务数据库一直使用5.4.3,最近由于研发提出需求:需要升级到6.5.3版本,基于版本不同,需要做 ...
- 【转帖】nginx变量使用方法详解-6
https://www.diewufeiyang.com/post/580.html Nginx 内建变量用在"子请求"的上下文中时,其行为也会变得有些微妙. 前面在 (三) 中我 ...
- [转帖]Linux make: g++: Command not found
https://www.cnblogs.com/kerrycode/p/4748606.html Linux使用make命令时遇到"make: g++: Command not found& ...
- [转帖]OpenAI 道歉:Redis bug 致 ChatGPT 故障、数据泄露
https://www.163.com/dy/article/I0N6HEIT0511D6RL.html OpenAI表示,Redis的开源库bug导致了发生在周一的ChatGPT故障和数据泄露事件, ...
- 我们开源了一个轻量的 Web IDE UI 框架
我们开源了一个轻量的 Web IDE UI 框架 Molecule 一个轻量的 Web IDE UI 框架 简介 Molecule 是一个受 VS Code 启发,使用 React.js 构建的 We ...