这篇文章上次修改于 429 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

问题表现

无法重载 nginx 的配置,进程杀掉马上重新起.不管是 taskkill /F /IM nginx.exe 还是 nginx -s reload 都无济于事

2023-02-15T06:53:17.png

杀不掉还能理解,但重载配置什么的都无法生效就搞不懂了.因为打算把一个本地服务搬到服务器的 docker 去,结果卡在配置没成功重载这里了.最后还是看日志才发现问题原因的....

upstream: "http://172.21.134.123:8080/favicon.ico"

什么 172? 我明明改成域名了啊?!而且端口也换过了!

此外,连续启动多个 nginx 也会出问题,可能是因为 pid 文件只储存一份.

问题出现的背景

作为一个服务器端的程序, Nginx 对 Linux 的支持度肯定是比 Windows 高的,其他服务器软件同理.这也就导致了在 Windows 下可能无法实现在 Linux 上的操作,比如如何让控制台程序在后台运行隐藏窗口.

为了实现这一需求,我找到了 RunHiddenConsole 这个程序,不仅隐藏了多余的窗口,而且还能让 php-cgi 稳定运行(原来在我 Windows 上每次处理较多请求时就会挂掉,还得手动重启).为了方便我也顺便把 Nginx 的服务一起挂上去了.

解决

首先关机,物理上解决这个进程.然后修改脚本,只负责 php 的进程守护(这个软件就是因为 php 在 Windows 下经常挂掉才出现的,模仿的是 Linux 下的 fpm).其他的还是老老实实留个窗口在后台运行吧,或者丢一起下次需要改配置的时候再重启一次.