nginx に特定の PHP ドキュメントを SSL 暗号化するように指示する

nginx に特定の PHP ドキュメントを SSL 暗号化するように指示する

私は以下の設定でサーバーをセットアップしました:

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

   location /login\.php
   {
   rewrite ^(.*) https://www.example.com/login.php$1 last;        
   }

   .. other settings
}

しかし、この設定ではリダイレクト エラー (リダイレクトが多すぎる) が発生します。login.php ファイルがある場合に SSL が必要で、他のすべてのファイルは SSL なしで提供されることを nginx に伝える方法はありますか?

答え1

nginx 0.7.14 以降では、別々のサーバー {} ブロックに分割せずに、http と https のサービス用のコンパクトな構成を作成できます。

listen 80;
listen 443 ssl;

# rest ssl configuration...

複数の場所を保護したい場合は、スキームをチェックし、「return」または「rewrite」でリダイレクトしてください。

location = /login.php {

      if($scheme = "http") {
              rewrite ^ https://$host$request_uri? permanent;
      }

      ...
}

答え2

可能です (他の回答を参照) が、一般的にはすべてを暗号化する方がよいでしょう。ユーザー名とパスワードを安全に転送し、フルアカウント アクセス クッキーをプレーンテキストで渡すことは、まったく暗号化しない場合とほぼ同じくらい危険です。

これがどれほど危険であるかの例として、この間違いを利用して Twitter / Facebook / Google などのユーザーを自動的に所有するプログラムがここにあります -->http://codebutler.com/firesheep

答え3

listen 80;と をlisten 443;別々のブロックに配置しますserver

SSL設定server(これは「その他の設定」にあると思います)は、ポート 443 でリッスンしているブロックにのみ入力する必要があります。

関連情報