关于nginx加载配置文件的巨坑
一、巨坑问题引入
今早前端开发又来追我一个问题,上月底29日问过(还以为他忘记了这事,或者这问题自己把自己给搞好了)。说是他本地调用线上系统的登录接口,一直转圈登不上。还一再给我强调要是登不上,调试线上环境的问题调不了(说有些账号正式环境才有,我就说你可以直接到测试环境数据库插入你想登的账号密码呀 = =)
然后浏览器打开正式环境的登录接口,返回400,nginx我是从来没有见过返回400的状态码的,当然我自己也没有定义过,没事搞这玩意干嘛
再看看nginx日志:
当时逼着我查这玩意,感觉很崩溃,严重超出能力范围,也无从下手。今天又逼着我弄,真是把我逼入绝境。前运维,开发朋友都问了一轮,无果,自己也无果。
前运维倒是叫我问拿一下开发本地转发的nginx配置文件,看看是不是写错了。还真的写错,不过改回来也是不行的。
。。。
server {
listen 80;
server_name 127.0.0.1;
。。。
location / {
index login.html index.htm;
}
location /后端项目名/ {
#后端地址+端口(这个是他加的注释)
proxy_pass https://域名/线上后台目录/rexxxe/sexxxty_login/new;
。。。
}
}
第一眼看,觉得转发怪怪的,以往不是proxy_pass某个地址就好了么,为啥是接口地址的。然后改过来,变成:
proxy_pass https://域名/线上后台目录/;
浏览器报错还是那样:400。然后叫他重新在本地跑他的nginx,我实时看下nginx和后台日志,一条日志记录都木有!!!!
然后只能求助公司那位后端开发 = =(公司跟我最好的开发同事,算半个运维吧)
二、巨坑问题解决过程
开发尝试把转发地址改到微信后台,也调不成功。然后这伟大的任务交给他处理了,他去看nginx配置文件(当然我也是看了一轮的,没有什么异样)
终于把我拯救起来了。说是nginx有个配置文件,也是转发到后台目录的,后台转发没开。顺序原来是箭头这样的
先简单说下这两个配置文件的区别:
假设根域名是:ljy.com
(1)www.conf :
【i】 server_name 写的是:server_name ljy.com www.ljy.com;
【ii】 关了页面登录后台转发(因为他们说这个域名是没用的,我就注释了后台转发部分,以免自己搞混自己。话说线上配置文件也真是乱七八糟的,很多个域名,转发相同的应用,我也搞不清楚是不是这些域名都用到,又不敢乱关)
(2)yjxxx.conf
【i】 server_name 写的是: server_name yjxxx.ljy.com;
【ii】 开了页面登录后台转发
贼坑爹的事来了:
开发本地nginx 写的server_name 127.0.0.1; 竟然默认调的是www.conf的后台转发,因为我注释了这段,所以调不成功,后台就报错了。
而且还有个nginx加载配置文件的先后顺序,默认优先调用www.conf 再调 yjxxx.conf 的配置文件
问题最终解决:
两个方法(选其一即好):
方法一:调换两个配置文件顺序,可以不开www.conf 的扫描后台转发
方法二:不调换顺序,要开www.conf 的后台转发配置