proxy_ssl_server_name

Директива `proxy_ssl_server_name` включает SNI для проксируемых запросов, позволяя NGINX отправлять имя сервера в SSL handshake.

Синтаксисproxy_ssl_server_name on | off;
По умолчаниюoff
Контекстhttp, server, location
Аргументыflag

Описание

Директива proxy_ssl_server_name управляет тем, включается ли поле Server Name Indication (SNI) в SSL/TLS requests, которые NGINX проксирует на другой сервер. Когда установлено в on, NGINX включает имя хоста из заголовка Host в SSL handshake, что важно для серверов, использующих несколько SSL-сертификатов для разных имён хостов на одном и том же IP-адресе. Это особенно актуально в сценариях, когда несколько доменов размещены на одном сервере с общими IP-адресами; правильный сертификат может быть выбран на основе информации SNI, предоставленной клиентом.

Директиву можно использовать в нескольких контекстах: блоках http, server и location, и она ожидает один аргумент — флаг. Установка директивы в on включает SNI, установка в off отключает его. По умолчанию директива установлена в off, то есть SNI не будет использоваться, если явно не включён. Важно отметить, что если сервер бэкенда не поддерживает SNI, правильный сертификат может не быть подан, что потенциально приведёт к ошибкам SSL-подключения.

Эта директива особенно полезна при работе с несколькими SSL-сертификатами на сервере бэкенда, поскольку она позволяет NGINX динамически выбирать соответствующий сертификат на основе запрошенного имени хоста, тем самым обеспечивая правильную SSL termination и повышая общую безопасность проксируемых соединений.

Пример конфига

location /api {
    proxy_pass https://backend.example.com;
    proxy_ssl_server_name on;
}

Убедитесь, что сервер бэкенда поддерживает SNI; в противном случае установка этой директивы в 'on' может привести к ошибкам SSL.

Проксирование на устаревший сервер, который некорректно обрабатывает SNI, может вызвать проблемы, если эта директива включена.

← Ко всем директивам