![nginx 重定向强制更新浏览器中的 URL](https://linux22.com/image/658015/nginx%20%E9%87%8D%E5%AE%9A%E5%90%91%E5%BC%BA%E5%88%B6%E6%9B%B4%E6%96%B0%E6%B5%8F%E8%A7%88%E5%99%A8%E4%B8%AD%E7%9A%84%20URL.png)
我有一个非常基本的 nginx 设置,可以重定向www.example.com
到example.com
最佳实践。它起作用了,在 Tor Firefox 浏览器中,转到http://www.idorecall.com/blog确实将地址栏中的 URL 更新为http://idorecall.com/blog。
但这不会改变 Chrome、Firefox Portable、IE 和 Opera Portable 地址栏中的 URL。
这是修改后的default
nginx 配置。除了 nginx.conf 之外,没有其他 nginx 配置文件。
server {
server_name www.idorecall.com;
return 301 $scheme://idorecall.com$request_uri;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name idorecall.com;
location / {
try_files $uri $uri/ =404;
}
location /blog {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $http_host;
proxy_pass http://127.0.0.1:2368;
}
}
wget -S
,http://www.rexswain.com/httpview.html、browsershots 等正确检测到 301“永久移动”重定向。但大多数浏览器都会保留 www URL。超级令人沮丧。Firefox 和 Opera 是从头安装的,因此没有 www 域的历史记录。
GitHub 设法将 http(s)://www.github.com 重定向至https://github.com在每个浏览器中。他们是如何做到的?
答案1
您没有看到重定向(而 krisFR 看到了),因为您有 IPv6(而他没有),并且server
包含重定向的 nginx 块仅用于 IPv4 连接。
当一个server
区块省略指令listen
,其默认值为listen *:80
,它仅监听所有 IPv4 地址(相当于listen 80
)。因此,此server
块永远不会用于 IPv6 连接,这些连接将落入您定义的default_server
。
为了解决这个问题,请添加适当的listen
指令来监听 IPv4 和 IPv6。
server {
listen 80;
listen [::]:80;
server_name www.idorecall.com;
return 301 $scheme://idorecall.com$request_uri;
}