现在手上有一个项目,分为前台(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后面加上了一个/。

通过网上搜集资料整理了下原因:

  1. Nginx 服务中配置指令 absolute_redirect 用来配置重定向的方式。默认开启,为绝对重定向;否则为相对重定向。(假装很明白的样子)
  2. 当我们访问URI时;如果访问资源为一个目录,并且URI没有以正斜杠(/)结尾;Nginx 服务就会返回一个301跳转,目标地址就是要加一个正斜杠。
  3. 在跳转过程中 server_name_in_redirect 指令设置跳转目标的域名,默认配置为on ,从请求的 header 中获取。否则从配置文件中的 server_name 中获取。
  4. 在跳转过程中 port_in_redirect指令设置跳转目录的端口,默认值为on,从 nginx 配置文件中的Listen端口获取。否则从接受到的请求头信息(header)中获取;如果是 Nginx 版本号大于 1.11.8,可以考虑用 absolute_redirect off;

所以上面的问题,只需在server块中添加 absolute_redirect off;即可解决,最后不要忘记了重新加载配置文件。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐