Назад | Перейти на главную страницу

Скажите nginx, чтобы SSL шифровал определенные документы PHP

Я настроил свой сервер со следующими настройками:

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 и все остальные файлы обслуживались без него?

Начиная с 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;
      }

      ...
}

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

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

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

В Конфигурация SSL (который, как я полагаю, находится в ваших "..других настройках") должен входить только в server блок, который прослушивает порт 443.