単一サイト上の異なる URL に対して SSL/非 SSL を使用するように Nginx を設定し、ユーザーがブラウザのアドレス バーに明示的に https と入力した場合は必ず SSL を使用するにはどうすればよいでしょうか。

単一サイト上の異なる URL に対して SSL/非 SSL を使用するように Nginx を設定し、ユーザーがブラウザのアドレス バーに明示的に https と入力した場合は必ず SSL を使用するにはどうすればよいでしょうか。

私の現状はnginx.conf次のようになります:

server {
    listen      80;
    server_name www.example.com;

    root /var/www/;
    location / {
    }
    location /users {
        rewrite ^ https://$http_host$request_uri? permanent;
    }
}

server {
    listen      443 ssl;
    server_name www.example.com;

    root /var/www/;
    location /users {
    }
    location / {
        rewrite ^ http://$http_host$request_uri? permanent;
    }
}

この構成では、ユーザーがサイトのページを移動すると、接続が SSL/非 SSL に切り替わります。 で始まる URL では SSL /users、その他のすべての URL では非 SSL になります。その結果、ユーザーがhttps://www.example.com/ブラウザのアドレス バーに明示的に入力した場合でも、結果のページは にリダイレクトされますhttp://www.example.com/

https://上記の設定で実現されるように、SSL/非SSL間の自動URL書き換えを実装し、ユーザーがブラウザのアドレスバーに明示的に入力した明示的なSSL要求を尊重する方法はありますか?

答え1

サーバーの観点からは、リンクをたどったり、サイトをクロールしたり、ロケーション バーに完全なアドレスを入力したりして行われたリクエストを区別する方法はありません。

アドレスを入力すると、Web ブラウザは Web サーバーに HTTP リクエストを送信します。https と入力すると、ポート 443 (デフォルト) への接続が試行されます。リクエスト ヘッダーには、ユーザーがリクエストを入力したか、リクエストがクロールされたかなどの情報は保持されません。

特定のユーザー エージェントに対して SSL を維持し、他のユーザー エージェントに対してはリダイレクトすることしかできません。

関連情報