nginx 重定向强制更新浏览器中的 URL

nginx 重定向强制更新浏览器中的 URL

我有一个非常基本的 nginx 设置,可以重定向www.example.comexample.com最佳实践。它起作用了,在 Tor Firefox 浏览器中,转到http://www.idorecall.com/blog确实将地址栏中的 URL 更新为http://idorecall.com/blog

但这不会改变 Chrome、Firefox Portable、IE 和 Opera Portable 地址栏中的 URL。

这是修改后的defaultnginx 配置。除了 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 -Shttp://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;
}

相关内容