首页 > 系统相关 >nginx刷新reload不生效问题排查

nginx刷新reload不生效问题排查

时间:2024-10-12 14:34:33浏览次数:6  
标签:排查 AI pid stop nginx reload 进程

问题现象

有个项目现场同事说他修改了nginx的配置,也执行了reload命令,但是就是不生效,而且能够正常访问nginx,不清楚为什么。

怎么办,什么年代了,当然是让他问问AI看怎么肥事。他说问了几个AI,也照着试了,把配置文件都给AI看了,都说没啥问题,AI让重启,让检查网络问题,让查看日志输出。很好,他都照做了,可是依然是不行。
image
那不可能吧,我倒是要看看哦。

排查处理

其实他的诉求很简单,线上有一台机子要停机维护,临时下线,他手动设置了down,然后想着reload就行了,结果客户反馈偶尔慢的一批,他查看error发现竟然还会路由到那个节点。

而且我看他给http节点新加了access日志,也没生效。

server 192.168.5.56:8889 max_fails=3 fail_timeout=30s down;
  • 检查了配置文件没问题,使用nginx -t输出successful说明配置无误。
  • 因为window系统,我还专门使用管理员在命令行执行了nginx -s reload。发现确实不起作用
  • error日志没有错误
  • 查看进程,有两个17个nginx进程(因为配置了16个worker_processes再加上一个主进程就是17个)
  • 那就直接干掉重新启动nginx(当然解决他的问题很简单,注释掉哪一行就行了,我们只是研究下为什么不起作用)。**使用nginx -s stop停掉了NG,然后查看任务管理器的进程发现确实没有了,之后再次nginx.exe运行,发现配置竟然仍然不起作用image
    **

发现问题并解决

这就很诡异了,不报错,配置也不生效。突然想到会不会NG并没有死掉,再次nginx -s stop,任务管理器的“进程”里面确实没有我先netstat -ano|findstr 80查看了竟然还存在很多进程占用80端口:
image
又切换到任务管理器的“详细信息” 页签,发现有一批nginx在运行(进程页签是看不到的)。而且尝试访问了一下,80端口当然是通的,可以访问!

也就是说,nginx -s stop并没有停止掉进程吗? 并不是,它只是停停止自己当前从nginx.pid文件中识别出来的进程(以及子进程),那为什么会出现和pid文件不一致的进程仍然存活呢?进过排查发现,他至少两次启动过NG,也就是多次点击启动nginx.exe 最后一次启动的进程号写入到nginx.pid中覆盖之前的进程号,但之前的进程仍然存在并监听对应的端口。执行-s stop只是停止了最后的这个进程相关,导致之前的进程仍然存在,仍然可用。那些请求都被之前的进程所监听,刷新配置文件的操作只是对当前pid起作用,所以就出现了开头的那种情况,看起来命令无误、配置无误,也不报错,就是不生效。
可能会想那我再次执行nginx -s stop多执行几次,是否能停掉之前的。当然不行,pid只记录一条。停止掉这个文件就删了。《不嫌麻烦可以把主进程号找到写入这个文件,在执行stop,没必要,直接按照下面的命令全部kill掉》

# 命令行执行kill,干掉所有nginx进程
taskkill /F /IM nginx.exe

然后重新启动即可!!
image

标签:排查,AI,pid,stop,nginx,reload,进程
From: https://www.cnblogs.com/Nuwa/p/18460487

相关文章

  • 在Ubuntu上升级Nginx
    1、安装先决条件:sudoaptinstallcurlgnupg2ca-certificateslsb-releaseubuntu-keyring2、导入官方的nginx签名密钥,以便apt可以验证软件包的真实性。获取密钥:curlhttps://nginx.org/keys/nginx_signing.key|gpg--dearmor|sudotee/usr/share/keyrings/nginx......
  • 替换掉js后重启nginx 页面加载后js还是原来的 解决方法.【js版本号】【js不生效】【js
    替换掉js后重启nginx页面加载后js还是原来的解决方法.【js版本号】【js不生效】【js失效】产品升级,部署js后,前端页面加载不生效,F12NetWork查看js源码还是原来的内容。但是查看前端服务器上js已经是最新版本。(一般是浏览器缓存导致,清除浏览器缓存即可,但是对于用户来说,只会用,有......
  • 某定时任务OOM排查
    现场定时任务OOM,堆转储文件8G,先打成tar.gz,再压缩一次,才得以传输过来。工具-MAT(MemoryAnalyzer)MAT下载地址当前启动需要JDK17:JDK17下载地址好像也可以使用JDK8,有兴趣的可以自己研究下如果dump出来的hprof文件过大,比如这个文件8G,需要改下MemoryAnalyzer......
  • 排查sshfs挂载失败的问题
    排查sshfs挂载失败的问题写代码在Linux上运行,但是熟悉的IDE(比如VScode)在自己的电脑上,可以使用sshfs把linux上的目录挂载到本地,再用VScode打开即可,可以使用下面的命令:sshfs-odebug,sshfs_debug,loglevel=debug-orw,allow_other,uid=1190,gid=1190,reconnect,ServerAliveInte......
  • nginx配置proxy_set_header
    深入解析Nginxproxy_set_header:实现高级代理功能-dashery-博客园(cnblogs.com)proxy_set_header 是Nginx配置中的一个重要指令,特别是在使用Nginx作为反向代理时。该指令允许你修改由Nginx传递给代理后端的请求头。这对于确保后端应用程序能够接收到正确的客户端信......
  • 基于 Nginx 的大型互联网集群架构与实战方案
    1.Nginx负载均衡基础配置首先,搭建一个基础的Nginx负载均衡器,用于将流量分发到多个后端服务器上。步骤1.1:安装Nginx在每台要作为负载均衡器的服务器上,安装Nginx。可以使用包管理工具进行安装,例如在Ubuntu上执行以下命令:sudoaptupdatesudoaptinstallnginx步骤1.......
  • Docker 环境下 Nginx 监控实战:使用 Prometheus 实现 Nginx 性能监控的完整部署指南
    Docker环境下Nginx监控实战:使用Prometheus实现Nginx性能监控的完整部署指南文章目录Docker环境下Nginx监控实战:使用Prometheus实现Nginx性能监控的完整部署指南一查看模块是否安装二配置status访问端点三Docker部署nginx-prometheus-exporter1)使用......
  • Docker安装Nginx
    1.下载镜像文件dockerpullnginx2.创建挂载目录mkdir-p/docker/nginx/{conf,conf.d,html,logs}3.创建nginx.conf配置文件路径为:/docker/nginx/conf/nginx.confusernginx;worker_processes1;error_log/var/log/nginx/error.logwarn;pid/var/run/ngin......
  • AWS Linux2 安装 nginx
    如果您使用的是AWSLinux2,则必须从AWS“ExtrasRepository”安装 nginx。要查看可用包的列表:#Viewlistofpackagestoinstallamazon-linux-extraslist您会看到类似于以下内容的列表:0ansible2disabled[=2.4.2]1emacsdisabled[=25.3]2memcached1......
  • 提升网站响应速度与可靠性:Nginx负载均衡最佳实践 转载
    负载均衡配置作为代理服务器,一般都需要向上游服务器的集群转发请求。这里的负载均衡是指选择一种策略,尽量把请求平均地分布到每一台上游服务器上。1.1upstream块语法:upstreamname{...}配置块:httpupstream块定义了一个上游服务器的集群,便于反向代理中的proxy_pa......