我让 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;