强制 Nginx 在重定向时使用浏览器端口而不是 docker 映射端口

强制 Nginx 在重定向时使用浏览器端口而不是 docker 映射端口

当我在主机和客户机上使用不同的端口映射 Nginx 服务器时,位置重定向遵循客户机端口而不是请求的 uri 的端口。

重现步骤:

$ cat /tmp/default.conf
server {
    listen       8080;
    server_name  localhost;
    location ~ ^/loveslash$ {
        return  301 $request_uri/;
    }
    location ~ ^/loveslash/$ {
        add_header Content-Type text/plain;
        return 200 'yayy!';
    }
    location / {
        add_header Content-Type text/plain;
        return 200 '¯\_(ツ)_/¯';
    }
}

$ docker run --name some-nginx -v /tmp/default.conf:/etc/nginx/conf.d/default.conf:ro -p 80:8080 --rm nginx


$ curl -i http://localhost/loveslash | grep Location
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   169  100   169    0     0   165k      0 --:--:-- --:--:-- --:--:--  165k
Location: http://localhost:8080/loveslash/
  • 我得到的是:http://localhost/loveslash -> http://localhost:8080/loveslash/
  • 我想要的是:http://localhost/loveslash -> http://localhost/loveslash/

答案1

因为您使用的是默认端口,所以您可以指示 Nginx 在生成外部重定向时从 URL 中简单地删除端口号。

例如:

server {
    listen 8080;
    port_in_redirect off;
    ...
}

这个文件了解详情。

相关内容