Большинство транзакций из веб-приложения защищены сами по себе, но не показывают значок замка, когда транзакции происходят в браузере. Цель состоит в том, чтобы определенные страницы, такие как страницы входа, были зашифрованы ssl и отображали значок блокировки в браузере. Примером может быть http://www.domain.com/pro должен быть https, но если вы перешли на http://www.domain.com он войдет через http. У нас есть несколько URI, которые нужно перенаправить.
Моя первая попытка была переписать:
rewrite ^/pro$ https://www.domain.com/pro
Но это, очевидно, вызывает цикл перенаправления, поэтому я попытался включить часть http.
rewrite ^http:*./pro$ https://www.domain.com/pro
Это также не сработало и привело к возникновению цикла перенаправления. Мое единственное предположение заключается в том, что регулярное выражение при перезаписи не смотрит на заголовок только на сам URI, поэтому оно должно начинаться с www, а не с http.
Я пробовал несколько вещей, используя местоположение вместо перезаписи, и здесь я застрял.
location /pro {
if ( $scheme = http ){
rewrite ^ https://www.domain.com/pro;
}
}
При этом в конфигурации происходит перезапись, но я получаю страницу 404 Not Found от nginx. Если я удалю его, но наберу https://www.domain.com/pro тогда он загружается нормально. Я чувствую, что оператор местоположения снова перехватывает URI, но не знает, что с ним делать, поскольку оператор if больше не соответствует действительности. Я просто не уверен, что еще включить в блок местоположения, чтобы заставить его работать.
Итак, как я могу заставить определенные страницы переключаться с http-соединения на https-соединение?
HTTPS и обычный HTTP будут поступать через разные порты, поэтому на самом деле вам нужно просто перенаправить любые обычные HTTP-запросы, которые вы хотите обслуживать по HTTPS, на HTTPS. Итак, следующее:
server {
listen 80;
server_name _;
location / {
rewrite ^/(pro)$ https://$host/$1;
}
}
... не должен вызывать цикл перенаправления, потому что он пересылает только на: 80, и он пересылает TO: 443 (это то, что HTTPS-запросы будут поступать по умолчанию).