$scheme
Переменная $scheme в NGINX возвращает протокол текущего запроса (HTTP или HTTPS). — NGINX Core (HTTP)
Описание
Переменная $scheme необходима для определения протокола, с помощью которого клиент инициировал запрос к серверу. Она проверяет, было ли соединение с сервером NGINX установлено по HTTPS или HTTP. Если запрос выполнен по HTTPS, переменная $scheme вернёт 'https', а для HTTP-запросов она вернёт 'http'. Эта переменная обычно устанавливается в процессе обработки запроса в ядре NGINX, и её значение определяется наличием или отсутствием действительного SSL-сертификата на сервере. Поэтому, если SSL настроен и запрос защищён, переменная устанавливается в 'https'. В противном случае по умолчанию используется 'http'. Также важно отметить, что скрипты, редиректы или другие параметры конфигурации часто используют эту переменную для формирования корректных URL в выводе ответов или HTTP-заголовках. Например, при перенаправлении пользователя или динамической генерации ссылок использование переменной $scheme гарантирует, что ссылки будут ссылаться на соответствующий протокол в зависимости от того, как пользователь получил доступ к серверу. Таким образом, она играет ключевую роль в средах, где одновременно могут существовать защищённый и незащищённый доступ.
Пример конфига
server {
listen 80;
server_name example.com;
location / {
return 301 $scheme://www.example.com$request_uri;
}
}Подсистема
httpКэшируется
ДаКонтексты
http, server, location, ifУбедитесь, что SSL настроен правильно; в противном случае он всегда будет возвращать 'http'.
Избегайте использования $scheme в контекстах, где он может быть не определён, например внутри некоторых директив, которые не обрабатывают запросы.
Чрезмерное использование $scheme может привести к проблемам безопасности, если его неправильно обрабатывать, например к раскрытию внутренних конечных точек по HTTP.