Я настроил свой сервер со следующими настройками:
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.