现在手上有一个项目,分为前台(ibms)和后台(opc)两部分,使用IP和端口进行访问测试,
使用http://192.168.100.10:7000
时访问前台,使用http://192.168.100.10:7000/admin
访问后台,nginx配置规则如下:
server {
listen 80;
server_name localhost;
location / {
root /srv/app/ibms;
try_files $uri $uri/ @router;
index index.html;
}
location /admin {
alias /srv/app/opc;
try_files $uri $uri/ /admin/index.html;
index index.html;
}
location @router {
rewrite ^.*$ /index.html last;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
访问前台一切正常,在访问后台是,如果在URI后面不加上/(http://192.168.100.10:7000/admin)
则会出现自动跳转到301的情况,跳转后域名为http://192.168.100.10/admin/
,可以发现端口不见了,在admin后面加上了一个/
。
通过网上搜集资料整理了下原因:
Nginx 服务中配置指令 absolute_redirect 用来配置重定向的方式。默认开启,为绝对重定向;否则为相对重定向。(假装很明白的样子)
当我们访问URI时;如果访问资源为一个目录,并且URI没有以正斜杠(/)结尾;Nginx 服务就会返回一个301跳转,目标地址就是要加一个正斜杠。
在跳转过程中 server_name_in_redirect 指令设置跳转目标的域名,默认配置为on ,从请求的 header 中获取。否则从配置文件中的 server_name 中获取。
在跳转过程中 port_in_redirect指令设置跳转目录的端口,默认值为on,从 nginx 配置文件中的Listen端口获取。
否则从接受到的请求头信息(header)中获取;如果是 Nginx 版本号大于 1.11.8,可以考虑用 absolute_redirect off;
所以上面的问题,只需在server块中添加 absolute_redirect off;即可解决,最后不要忘记了重新加载配置文件。