概述
刚碰到一个问题坑了我一个多小时,特写一篇文章记录防止再犯。
简而言之就是修改了nginx文件之后一直没生效但我误以为生效了,导致对nginx的域名配置优先级产生了怀疑。
详述
本地有如下nginx配置:
server {
listen 80;
server_name demo.liuxianan.com;
location / {
root E:\Workspace\demo;
index index.html index.jsp;
}
}
server {
listen 80;
server_name test.liuxianan.com;
location / {
root E:\Workspace\test;
index index.html index.jsp;
}
}
server {
listen 80;
server_name ~^(.+)?\.liuxianan\.com$;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8080/base/$1$request_uri;
}
}
demo.liuxianan.com
是以前写的,一直是生效的,但是新写的test.liuxianan.com
怎么都不生效,偏偏命中最后面那一个规则了,demo
和test
是一模一样的配置,为什么就不生效呢?nginx
都reload
了很多次,甚至都“重启”了很多次了,还是这样,让我不禁对人生产生了怀疑。
后来不知道是什么驱使我打开任务管理器看看,我去,竟然冒出这么多进程:
我们都知道正常的nginx
运行只会有2个进程的,一个当我运行nginx -s stop
时这些进程依然都在,怪不得无论我怎么reload
都不生效呢!然后就仔细研究了下这种情况出现的原因:正常双击一次nginx
会出现2个nginx
进程,然后reload
之后还是2个,stop
之后就没了,但是如果双击n次nginx.exe
就会出现n*2
个进程,stop
只会停掉其中某一个,此时无论你如何reload
都不会生效了,坑死我了!
教训
Windows平台千万不要多次双击nginx,如果出现reload
不生效的情况,一定要检查是不是有2个以上的进程。