对于nginx,大家已经如雷贯耳。但大多数人像我一样只是停留在配置使用阶段。对于出现问题不知道如何定位问题,只能是百度,遵循前人的经验。或者打开官方网站查找。昨天我们上线就遇到了一个nginx配置不当引发301问题
问题描述:新系统上线完后,发现通过域名访问时而好用(mgmt.jerry.com/demo/)时而不好用(mgmt.jerry.com/demo).仔细观察请求地址发现不好用的时候项目名后面没有斜杠“/”。这是为什么呢?另外发现请求不带斜杠nginx默认301永久重定向到mgmt.jerry.com:8080/demo/ (nginx配置的监听端口是8080)端口号由80变成了8080
以下是我们nginx.conf的部分配置
location ~ ^/(demo)/ {
proxy_pass http://127.0.0.1:8080/$1/index.html;
}
location ~ ^/(demo1)/ {
proxy_pass http://127.0.0.1:8080/$1/index.html;
}
location ~ ^/(demo2)/ {
proxy_pass http://127.0.0.1:8080/$1/index.html;
}
location = / {
proxy_pass http://127.0.0.1:8080/demo;
}
配置文件的意图很明显:不同的项目名过来命中不同的index页面,默认只访问域名代理到demo的index页面。
~ ^ 匹配输入字符串开始的位置,location的正则表达式中使用了目录/(demo)/,当在浏览器输入mgmt.jerry.com/demo是无法匹配上的。而mgmt.jerry.com/demo/是可以匹配上的,匹配上就可以正常访问了demo/index.html了。这就解释了有的时候好使,有时候不好使的问题了,立马修改配置为
location ~ ^/(demo) {
proxy_pass http://127.0.0.1:8080/$1/index.html;
}
location ~ ^/(demo1) {
proxy_pass ht