Как настроить Nginx на использование SSL/не SSL для разных URL-адресов на одном сайте, но всегда использовать SSL, если пользователь явно вводит https в адресной строке браузера?

Как настроить Nginx на использование SSL/не SSL для разных URL-адресов на одном сайте, но всегда использовать SSL, если пользователь явно вводит https в адресной строке браузера?

Мой текущий вариант 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 для определенных пользовательских агентов и перенаправить для других.

Связанный контент