Nginx
nginx 重定向,強制更新瀏覽器中的 URL
我有一個非常基本的 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 。他們怎麼做到的?
您沒有看到重定向(並且 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; }