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

Dan*_*scu 5 nginx firefox google-chrome opera

我有一个非常基本的 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

wget -Shttp://www.rexswain.com/httpview.html、浏览器截图等正确检测到 301“永久移动”重定向。大多数浏览器保留 www URL。超级令人沮丧。Firefox 和 Opera 是从头开始安装的,因此没有 www 域的历史记录。

GitHub 设法在每个浏览器中将 http(s)://www.github.com 重定向到https://github.com。他们如何做到这一点?

Mic*_*ton 4

你没有看到重定向(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;
}
Run Code Online (Sandbox Code Playgroud)