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 краща.