Nginx

nginx 重定向,強制更新瀏覽器中的 URL

  • October 29, 2016

我有一個非常基本的 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 -S, http://www.rexswain.com/httpview.html , browsershots 等正確檢測到 301“永久移動”重定向。大多數瀏覽器雖然保留 www URL。超級沮喪。Firefox 和 Opera 是從頭開始安裝的,因此 www 域沒有歷史記錄。

GitHub 設法在每個瀏覽器中將 http(s)://www.github.com 重定向到https://github.com 。他們怎麼做到的?

您沒有看到重定向(並且 krisFR 是),因為您有 IPv6(而他沒有),並且server包含重定向的 nginx 塊僅用於 IPv4 連接。

當一個server塊省略指令時,它預設為listenlisten *: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;
}

引用自:https://serverfault.com/questions/690971