多个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进程。

另:

nginxwindows上启动会有两个nginx.exe进程,这是因为nginxwindows上使用了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进程运行导致配置加载失效问题的更多相关文章

  1. 深入理解 Laravel 中 config 配置加载原理

    Laravel的配置加载其实就是加载config目录下所有文件配置.如何过使用php artisan config:cache则会把加载的配置合并到一个配置文件中,下次请求就不会再去加载config目 ...

  2. spring配置加载2次实例问题。

    WEB.XML 中SPRING 配置及重复加载问题 Posted on 2012-11-13, 15:48, by tmser, under java 周边 . 项目内存溢出,mat 查看了一下发现s ...

  3. Expressjs配置加载器

    有些东西就是操刀开干,没什么好解释的.... 问题引入 解决问题 直接上码 env.js index.js 使用方法 初始化 使用方法 写在最后 问题引入 大家都知道在日常的研发过程中,我们的程序会有 ...

  4. 字节码编程,Javassist篇三《使用Javassist在运行时重新加载类「替换原方法输出不一样的结果」》

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 通过前面两篇 javassist 的基本内容,大体介绍了:类池(ClassPool) ...

  5. 关于flume配置加载(二)

    为什么翻flume的代码,一方面是确实遇到了问题,另一方面是想翻一下flume的源码,看看有什么收获,现在收获还谈不上,因为要继续总结.不够已经够解决问题了,而且确实有好的代码,后续会继续慢慢分享,这 ...

  6. 关于flume配置加载

    最近项目在用到flume,因此翻了下flume的代码, 启动脚本: nohup bin/flume-ng agent -n tsdbflume -c conf -f conf/配置文件.conf -D ...

  7. Java实现配置加载机制

    前言 现如今几乎大多数Java应用,例如我们耳熟能详的tomcat, struts2, netty…等等数都数不过来的软件,要满足通用性,都会提供配置文件供使用者定制功能. 甚至有一些例如Netty这 ...

  8. 异常处理之IIS配置加载出错

    问题详情:  一台部署在海外服务器,在管理IIS过程中,出现问题 There was an error when trying to connect. Do you want > to rety ...

  9. Springboot学习01- 配置文件加载优先顺序和本地配置加载

    Springboot学习01-配置文件加载优先顺序和本地配置加载 1-项目内部配置文件加载优先顺序 spring boot 启动会扫描以下位置的application.properties或者appl ...

  10. Java运行时动态加载类之ClassLoader

    https://blog.csdn.net/fjssharpsword/article/details/64922083 *************************************** ...

随机推荐

  1. sipp3.6 on centos7安装部署

    概述 在VOIP软交换的开发过程中,必然需要对软交换进行批量压测. SIP压测工具一般都是sipp,免费,开源,功能足够强大,配置灵活,优点多. 环境 centos7.9 cmake3.6 sipp ...

  2. 机器学习-无监督机器学习-主成分分析PCA-23

    目录 1. 降维的方式 2. PCA的一般步骤 3. 思想2 最小化投影距离 4. Kernelized PCA 1. 降维的方式 对于维度灾难.数据冗余,这些在数据处理中常见的场景,我们不得不进一步 ...

  3. 第1篇 numpy 语法

    import numpy as np A = np.array([ [1, 2, 3, 4], [5, 6, 7, 8], ], dtype=int) # dtype指定数据类型int float p ...

  4. 基于java+springboot的求职招聘网站-求职招聘管理系统

    该系统是基于java+springboot开发的求职招聘网站.网上招聘管理系统.网上人才招聘系统.毕业生求职招聘系统.大学生求职招聘系统.校园招聘系统.企业招聘系统.是给师弟开发的毕业设计.大家学习过 ...

  5. K8S_IPV6 POD与数据库联通方法以及快速网络调试的一个思路

    K8S_IPV6 POD与数据库联通方法以及快速网络调试的一个思路 背景 前端时间搭建了一套K8S only IPV6 Single Stack的测试环境 因为自己长时间不搞K8S了, 并且IPV6的 ...

  6. MongoDB的安装使用与监控

    MongoDB的安装使用与监控 下载 https://www.mongodb.com/try/download/community 我这边习惯于下载 Windows 的 MSI 进行安装 Linux ...

  7. [转帖]一文搞懂各种数据库SQL执行计划:MySQL、Oracle等

    https://zhuanlan.zhihu.com/p/99331255 MySQL 执行计划 Oracle 执行计划 SQL Server 执行计划 PostgreSQL 执行计划 执行计划(ex ...

  8. [转帖]jmeter 使用beanshell 编写脚本

    目录 一.介绍 1.1 介绍 1.2 下载&启动 二.jmeter中创建beanshell脚本 三.jmeter与beanshell 数据交互 3.1 例子1 beanshell 将变量传给j ...

  9. [转帖]kafka压测多维度分析实战

    设置虚拟机不同的带宽来进行模拟压测 ---------kafka数据压测-------------------1.公司生产kafka集群硬盘:单台500G.共3台.日志保留7天.         1. ...

  10. 【转帖】x86服务器中网络性能分析与调优(高并发、大流量网卡调优)

    最近在百度云做一些RTC大客户的项目,晚上边缘计算的一台宿主机由于CPU单核耗被打满,最后查到原因是网卡调优没有生效,今天查了一下网卡调优的资料,欢迎大家共同探讨. 一.网卡调优方法 1.Broadc ...