Nginx 相当于 UseCanonicalName (外部名称/端口)

Nginx 相当于 UseCanonicalName (外部名称/端口)

我让 nginx 在前端代理后面运行,因此当 nginx 监听端口 8080 时,客户端实际上必须连接到端口 80。

这意味着如果客户端请求与目录相对应的 URL,但缺少最后的斜杠,他们会收到到错误位置的 301 重定向。

简化配置:

server {
    listen 8080 default_server;
    server_name example.com;
    root /srv/www/html;
    autoindex on;
}

假设这/srv/www/html/foo是一个目录。如果我运行curl -I http://localhost:8080/foo,则会收到:

HTTP/1.1 301 Moved Permanently
Server: nginx/1.10.3
Date: Tue, 18 Jun 2019 20:22:13 GMT
Content-Type: text/html
Content-Length: 185
Location: http://localhost:8080/foo/
Connection: keep-alive

当我想要看到的是:

...
Location: http://localhost/foo/
...

(即,客户端重定向到的位置与 nginx 实际接收连接的端口号不同。)

(我并不特别关心 nginx 是使用标头中的主机名还是在这种情况下Host指定的主机名。)server_name

使用 Apache,可以通过设置 来实现UseCanonicalName。如何使用 Nginx 来实现?

答案1

您使用port_in_redirect指示。

port_in_redirect off;

相关内容