不像Linux
,Nginx
在Windows
上执行,可以多次启动,每次启动都会生成基于配置文件中工作进程数+主进程(1)
个数量的进程,不会有任何报错提示,在nginx.exe
的配置文件conf
配置目录下nginx.conf
工作进程数配置如下,标识工作进程数为1,实际启动进程为两个,一个工作进程一个主进程
# user root; worker_processes 1;
启动命令后配置无效,对于刚刚接触Nginx
来说的朋友,当真是热锅上的蚂蚁,团团转
,本章主要是讲解作为新手在·Windows
上使用Nginx
,遇到此问题改如何排查和解决,此处为[官方链接]http://nginx.org/en/download.html,如果访问不到网站可联系笔者,获取Nginx
高版本压缩包
问题场景
起初配置好以后是可以正常使用,修改了配置文件,重新启动发现,自己配置的相关内容,并没有生效,反复启动,依然无效
,所谓的无效
就是访问对应服务以及端口,自己最后一次配置的相关处理都好像没有配置一般,服务正常,配置无效
,执行重启指令后,服务配置无效
,停止服务再启动也无效
常见可能
服务多次启动
服务启动多次,会造成出第一次启动的服务能够正常生效外,其余都只是一个无用的子进程,推测为多次启动时,由于读取的是同一配置文件和监听的是统一服务端口号,造成后续启动的nginx.exe
进程无法执行,只能等待,类似挂起状态,没有任何操作和响应,而Nginx for Windows
每次启动都会将配置文件内容读取出来缓存在内存中,并不会应为配置变更,Nginx
就重新加载配置内容,新的进程如果只是加载新的配置,并未正常执行,新的配置自然无效,问题复现
原始配置
原始配置此处以下载的Nginx for Windows
软件包,解压之后的状态为例,所以本地配置文件仅仅只有一个80
端口被作为服务监听端口
......省略....... http { ......省略....... server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } ......省略....... } }
第一次启动nginx
修改端口为7080
并保存
......省略....... http { ......省略....... server { listen 7080; server_name localhost; location / { root html; index index.html index.htm; } ......省略....... } }
启动cmd
切换到nginx.exe
所在目录下,执行指令start nginx
,有一个黑框一闪而过
>start nginx >tasklist /FI "IMAGENAME eq nginx.exe" 映像名称 PID 会话名 会话# 内存使用 ========================= ======== ================ =========== ============ nginx.exe 23456 Console 1 9,816 K nginx.exe 58692 Console 1 10,348 K
请求浏览器请求http://localhost:7080
,结果如下:
配置变更
此时增加nginx.conf
中改server
下的location
匹配规则
......省略....... http { ......省略....... server { listen 7080; server_name localhost; location / { root html; index index.html index.htm; } #增加规则 location /test/ { alias html/; index index.html index.htm; } ......省略....... } }
第二次启动nginx
>start nginx >tasklist /FI "IMAGENAME eq nginx.exe" 映像名称 PID 会话名 会话# 内存使用 ========================= ======== ================ =========== ============ nginx.exe 23456 Console 1 9,784 K nginx.exe 58692 Console 1 10,308 K nginx.exe 54800 Console 1 9,828 K nginx.exe 38372 Console 1 10,352 K
这是时候,发现进程数量为四,与启动次数成正比,如果是查看nginx.exe
同级目录下的logs
文件夹下,可以发现一个nginx.pid
文件,文件内容为54800
,表示第二次启动时,写入的主进程id
号,其实第一次启动时,也同样会写入该次启动时的主进程id
,每次启动都会覆盖上一次启动的进程id
,停止时会移除nginx.pid
理论上,此时请求http://localhost:7080/test
能够同样访问到第一次启动时的页面,可是实际返回结果如下:
查看logs
下的错误日志error.log
内容为:
[error] 34444#57956: *1 "解压路径\nginx-1.21.1/html/test/index.html" is not found (3: The system cannot find the path specified)
确实没有这个路径,可是修改的配置是将test
指向别名路径html
文件夹,默认文件也是index.htm
或者index.html
,当前第二次配置文件内容无效