web-dev-qa-db-ja.com

ブラウザのURLを強制的に更新するnginxリダイレクト

ベストプラクティス に従って、www.example.comexample.comにリダイレクトする非常に基本的なnginxセットアップがあります。これは機能し、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の「永続的に移動」リダイレクトを正しく検出します。ただし、ほとんどのブラウザはwwwURLを保持します。超イライラする。 FirefoxとOperaは最初からインストールされているため、wwwドメインの履歴ヒットはありません。

GitHubは、すべてのブラウザでhttp(s)://www.github.comを https://github.com にリダイレクトします。彼らはこれをどのように行うのですか?

2
Dan Dascalescu

IPv6を使用しているため(そしてkrisFRは表示されていないため)、リダイレクトは表示されません。リダイレクトを含むnginx serverブロックは、IPv4接続にのみ使用されます。

serverブロックが listenディレクティブ を省略した場合、デフォルトでlisten *:80になり、すべてのIPv4アドレスのみをリッスンします(listen 80と同等です)。したがって、このserverブロックは、定義されたdefault_serverにフォールスルーするIPv6接続には使用されません。

この問題を解決するには、適切なlistenディレクティブを追加して、IPv4とIPv6の両方でリッスンします。

server {
  listen 80;
  listen [::]:80;
  server_name www.idorecall.com;
  return 301 $scheme://idorecall.com$request_uri;
}
3
Michael Hampton