proxy_ssl_server_name
Директива `proxy_ssl_server_name` включает SNI для проксируемых запросов, позволяя NGINX отправлять имя сервера в SSL handshake. — NGINX HTTP Core
Описание
Директива `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, может вызвать проблемы, если эта директива включена.