Как настроить файл conf Nginx для принудительной установки SSL только по одному из путей на моем сайте и не-SSL по всем остальным?
Например, я хочу, чтобы все URL-адреса в / user были https, а все остальные URL-адреса - http.
Для первой части у меня есть:
rewrite ^/user(.*) https://$http_host$request_uri?;
Я не хочу использовать «если». Я предполагаю, что это будет использовать порядок операций, но я не хочу оказаться в цикле.
/user
и non-ssl для всех других URL-адресов. В результате даже пользователь явно вводитhttps://www.example.com/
в адресную строку браузера полученную страницуhttp://www.example.com/
. Есть ли способ реализовать авто-перезапись URL-адресов между ssl / non-ssl, что достигается настройками, описанными в этом ответе, но при этом уважать явный запрос ssl, если он явно введен пользователем в адресной строке? Благодарность!Nginx позволяет обрабатывать HTTP и HTTPS в одном
server
блоке. Таким образом, вам не нужно дублировать директивы для обоих и перенаправить путь, который вы хотите защититьБудьте уверены, чтобы не поставить
ssl on
строку там, потому что это сломает простой HTTP.При желании вы можете перенаправить все другие запросы из HTTPS обратно в HTTP таким же образом:
ОБНОВЛЕНИЕ : как любезно указывает Алексей Тен в разделе комментариев, проверка
scheme
каждого запроса не очень хорошая идея. Вы должны следовать декларативному способу настройки вашего nginx. В этом случае объявите два серверных блока с перенаправлениямиlocation
, переместите общую логику в отдельный файл иinclude
в оба. Так что ответ GruffTech лучше.источник
include
директиву для общих директив. Некоторое дублирование в порядке.