多个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. P1185【绿】

    这道题是画图题,画图题当画布总大小较小的时候其实可以先创建一个二维数组,这样就可以实现随意移动"光标"式的画图,然后直接输出处理后的画布即可,只要注意题目要求的数据范围足够小.画布 ...

  2. 解决ssh远程登录Too many authentication failures报错

    远程登录失败,报错,造成无法登录的情况,原因为:多次输入密码失败导致登录异常. 解决方案: 1.登录主机:vi /etc/ssh/sshd_config 2.找到MaxAuthTries,修改数值变大 ...

  3. 05_二叉树的层次遍历II

    二叉树的层序遍历 II 给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 . (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 示例 1: 输入:root = [3,9,20 ...

  4. socket TCP DPT 网络编程

    复习: ARP协议: 广播和单播 通过ip地址获得mac地址 机器A发起一个arp请求(只包含A的ip地址) 交换机接收到请求,广播这条消息 所有的机器都会接受到这条请求,只有需要寻找的机器B的ip地 ...

  5. Kubernetes 网络:Pod 和 container 的那点猫腻

    1. Kubernetes 网络模型 在 Kubernetes 的网络模型中,最小的网络单位是 Pod.Pod 的网络设计原则是 IP-per-Pod,即 Pod 中 container 共享同一套网 ...

  6. 【SHELL】[ ]、[[ ]]条件判断结构

    输入参数包含 'arg-m' 时,会输出 Hit Arg-M 和 Hit Arg-N [[ ${EXEC_PARAMS[@]} =~ 'arg-m' ]] && echo " ...

  7. 百度网盘(百度云)SVIP超级会员共享账号每日更新(2024.01.08)

    一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...

  8. 海思Hi35xx uboot启动分析总结

    前言 在嵌入式linux设备中,uboot的最终目的就是启动kernel.对于uboot而言,没有人把它引导起来,所以uboot首先需要把自己加载起来,然后再去引导kernel的启动,这也就可以大致的 ...

  9. TiDB恢复部分表的方式方法

    TiDB恢复部分表的方式方法 背景 今天同事告知误删了部分表. 因为是UAT准生产的环境, 所以仅有每天晚上11点的备份处理. 同时告知 昨天的数据也可以. 得到认可后进行了 TiDB的单表备份恢复. ...

  10. [转帖]redis 持久化方式 - aof 和 rdb 区别

    https://wenfh2020.com/2020/04/01/redis-persistence-diff/   aof 和 rdb 是 redis 持久化的两种方式.我们看看它们的特点和具体应用 ...