301重定向时,nginx保留端口号

我正在尝试将第二个品牌的网络应用程序拆分为第一个品牌,并使用301重定向重定向任何挥之不去的流量.服务器在端口8001上的Vagrant框转发中运行.我希望:

而不是https://local-dev-url:8001/foo/(anything) 301https://local-dev-url:8001/(anything)

而不是https://local-dev-url:8001/adminfoo/(anything) 301https://local-dev-url:8001/admin/(anything).

这就是我所拥有的:

    location ~ /foo/?(.*)${
        return 301 $1/;
    }

    location ~ /adminfoo/?(.*)${
        return 301 admin/$1/;
    }

    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Port 443;
        proxy_set_header Authorization $http_authorization;
        proxy_set_header X-Scheme $scheme;
        proxy_pass http://127.0.0.1:5000;
        proxy_redirect http:// $scheme://;
    }

    location /admin/ {
        alias /hostonly/path/to/admin/stuff/;
    }

但是,不是将https://local-dev-url:8001/foo/重定向https://local-dev-url:8001/而是301https://local-dev-url//. (没有端口号,额外的斜杠.)我已经看到了对重定向的URL进行硬编码的答案,但由于我与许多其他开发人员合作并且我们都有唯一的本地开发URL,唯一一致的部分是: 8001端口号.

有没有办法配置301按需工作?

最佳答案
如果Nginx没有侦听端口8001,则无法知道重定向中使用哪个端口.您需要明确指定它:

location ~ /foo(.*)${
    return 301 $scheme://$http_host$1;
}
location ~ /adminfoo(.*)${
    return 301 $scheme://$http_host/admin$1;
}

$http_host变量由原始请求中的主机名和端口组成.有关详情,请参见this document.

相关文章

一、Linux下Nginx的安装 1.去官网 http://nginx.org/download/下载对应的Nginx安装包,推荐使...
一、空格:默认匹配、普通匹配 location / { root /home; } 二、= :精确匹配(表示匹配到 /home/resou...
``` nginx -c 配置文件路径 ``` ``` /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.con...
前言 nginx可所谓是如今最好用的软件级别的负载均衡了。通过nginx的高性能,并发能力强,占用内存下的特...
1.ngnix概念 Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄...
博客园从今天上午就开始报502错误 , 他的原因还不知道 , 暂时先说下我们遇到502的排查情况 最大的可能性...