
Мой текущий вариант nginx.conf
выглядит примерно так:
server {
listen 80;
server_name www.example.com;
root /var/www/;
location / {
}
location /users {
rewrite ^ https://$http_host$request_uri? permanent;
}
}
server {
listen 443 ssl;
server_name www.example.com;
root /var/www/;
location /users {
}
location / {
rewrite ^ http://$http_host$request_uri? permanent;
}
}
При такой конфигурации соединение переключается с/на ssl/non-ssl, когда пользователь переходит по страницам сайта, ssl для URL, начинающихся с /users
и non-ssl для всех остальных URL. В результате, даже если пользователь явно вводит адрес https://www.example.com/
в адресной строке браузера, результирующая страница перенаправляется на http://www.example.com/
.
Есть ли способ реализовать автоматическую перезапись URL-адресов между SSL/не-SSL, как это достигается с помощью настроек выше, но при этом учитывать явный запрос SSL, если https://
он явно введен пользователем в адресной строке браузера?
решение1
С точки зрения сервера нет возможности отличить запрос, сделанный путем перехода по ссылке, сканирования сайта или ввода полного адреса в адресной строке.
Когда вы вводите адрес, веб-браузер отправляет HTTP-запрос на ваш веб-сервер. Если вы ввели https, он попытается подключиться к порту 443 (по умолчанию), а заголовки запроса не содержат информации о том, ввел ли пользователь запрос или запрос или, например, бот его просканировал.
Все, что вы можете сделать, это сохранить SSL для определенных пользовательских агентов и перенаправить для других.