Nginx позволяет обрабатывать HTTP и HTTPS в одном server
блоке. Таким образом, вам не нужно дублировать директивы для обоих и перенаправить путь, который вы хотите защитить
server {
listen 80 default_server;
listen 443 ssl;
... ssl certificate and other configs ...
location /user {
if ($scheme = 'http') {
rewrite ^ https://$http_host$request_uri? permanent;
}
}
... your basic configuration ...
}
Будьте уверены, чтобы не поставить ssl on
строку там, потому что это сломает простой HTTP.
При желании вы можете перенаправить все другие запросы из HTTPS обратно в HTTP таким же образом:
if ($scheme = 'https') {
rewrite ^ http://$http_host$request_uri? permanent;
}
ОБНОВЛЕНИЕ : как любезно указывает Алексей Тен в разделе комментариев, проверка scheme
каждого запроса не очень хорошая идея. Вы должны следовать декларативному способу настройки вашего nginx. В этом случае объявите два серверных блока с перенаправлениями location
, переместите общую логику в отдельный файл и include
в оба. Так что ответ GruffTech лучше.