私は以下の設定でサーバーをセットアップしました:
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 でリッスンしているブロックにのみ入力する必要があります。