【发布时间】:2017-01-23 22:53:21
【问题描述】:
我想在重写时动态保留 ServerName 和 Port: 假设防火墙将端口 8081 重定向到 80。 因此,如果我使用“192.168.1.123/frontend”或“my.domain.tld:8081/frontend”访问网络服务器,我应该重定向到“192.168.1.123/frontend/”或“my.domain.tld: 8081/前端/"
如果我使用普通的redirect rewrite ^(.*[^/])$ $1/ permanent; 并使用端口 8081 访问,则该端口被删除。
(我已经试过port_in_redirect off;)
我几乎使用默认配置:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name _;
rewrite ^(.*[^/])$ $1/ permanent;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
}
谢谢你的期待!
解决方案: 感谢 NGINX 邮件列表! 我用重写规则解决了这个问题:
if (-d $request_filename) {
rewrite [^/]$ $scheme://$http_host$uri/ permanent;
}
【问题讨论】:
-
Nginx 不知道请求中有端口。所以,你无法阻止它。但是您可以改为重定向到完整的 uri
-
无论如何让防火墙将端口8081重定向到80是一个奇怪的想法
-
@AlexeyTen 为什么nginx不知道有端口?如果我使用 my.domain.tld:8081/frontend/ nginx 访问该网站,则不会删除端口,只有在我访问末尾没有斜杠的情况下才会删除端口
-
Nginx 不会删除端口,因为它不会重定向您。它不在乎您在浏览器中看到的内容。但它接受端口 80 上的连接,这是 nginx 知道的唯一端口。当您访问不带斜线的 url 时,nginx 会将您重定向到带斜线的 url,此时它生成的 url 不带端口(因为默认为 80)。
标签: nginx url-rewriting port strip