
私の現状は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 を維持し、他のユーザー エージェントに対してはリダイレクトすることしかできません。