Укажите 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
}

Однако при такой настройке я получаю ошибку перенаправления (слишком много перенаправлений). Есть ли способ сообщить nginx, что если у меня есть файл login.php, то мне нужен SSL, а все остальные файлы обслуживаются без него?

решение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

Можно (см. другой ответ), но, как правило, лучше все зашифровать — безопасная передача имени пользователя и пароля, а затем предоставление им cookie-файла для полного доступа к учетной записи в открытом виде почти так же опасно, как и полное отсутствие шифрования.

В качестве примера того, насколько это опасно, посмотрите здесь программу, которая автоматически присваивает себе пользователей Twitter / Facebook / Google и т. д., используя эту ошибку -->http://codebutler.com/firesheep

решение3

Поместите listen 80;и listen 443;в отдельные serverблоки.

TheSSL-конфигурация(который, как я предполагаю, находится в ваших «.. ​​других настройках») должен попадать только в serverблок, который прослушивает порт 443.

Связанный контент