关于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
(1)www.conf 的server_name 写的是:server_name ljy.com www.ljy.com; 关了页面登录后台转发(因为他们说这个域名是没用的,我就注释了,真是神又是他们,鬼也是他们)
(2)yjxxx.conf 的server_name 写的是: server_name yjxxx.ljy.com; 开了页面登录后台转发
贼坑爹的事来了:
开发本地nginx 写的server_name 127.0.0.1; 竟然默认调的是www.conf的后台转发,因为我注释了这段,所以调不了后台就报错了。
而且还有个nginx加载配置文件的先后顺序,默认优先调用www.conf 再调 yjxxx.conf 的配置文件
问题最终解决:
两个方法(选其一就好):
方法一:调换两个配置文件顺序,可以不开www.conf 的扫描后台转发
方法二:不调换顺序,要开www.conf 的后台转发配置 来源:https://www.icode9.com/content-3-845651.html