Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
Apache Error: AH02032: Hostname provided via SNI and hostname provided via HTTP have no match Linux / DevOps

Apache Error AH02032: Hostname via SNI and HTTP have no match — Решение

Обновлено: 18.08.2026  ·  Официальная база знаний

Клиент получает ошибку 400 Bad Request при попытке выполнить защищенное HTTPS-соединение. В error.log Apache регистрируется нарушение соответствия заголовков безопасности: [ssl:error] [pid 1234:tid 5678] [client ...] AH02032: Hostname site-a.com provided via SNI and hostname site-b.com provided via HTTP have no match.

Уровень протоколаПереданное имя хостаСущность
TLS Handshake (SNI)site-a.comИмя хоста в расширении Server Name Indication
HTTP/1.1 HeaderHost: site-b.comЗаголовок Host внутри расшифрованного HTTP запроса
Результат проверки ApacheНесоответствие (Mismatch)Блокировка запроса с кодом HTTP 400
  • Apache принудительно обрывает запрос из соображений безопасности (защита от Domain Fronting и атак подмены виртуальных хостов).
  • Сбой часто возникает при использовании некорректно настроенных обратных прокси (Reverse Proxy), CDN или самописных ботов/скриптов curl.
  1. Если запрос отправляется через cURL или скрипт автоматизации, убедитесь, что заголовок Host совпадает с запрашиваемым доменом в URL:
    # ПРАВИЛЬНО:
    curl https://site-a.com/
    
    # НЕПРАВИЛЬНО (вызывает AH02032):
    curl -H "Host: site-b.com" https://site-a.com/
  2. Если перед Apache установлен Nginx (в роли SSL-терминатора или Reverse Proxy), настройте корректную передачу SNI и заголовка Host в nginx.conf:
    location / {
        proxy_pass https://backend_apache;
        proxy_set_header Host $host;
        proxy_ssl_server_name on; # Включает совпадение SNI прокси с $host
        proxy_ssl_name $host;
    }
  3. Если между серверами используется CDN (Cloudflare, CloudFront), проверьте, чтобы Origin Host Header в настройках проксирования совпадал с именем сертификата на целевом сервере.
  4. Если требуется разрешить нестандартные перенаправления, проверьте конфигурацию виртуальных хостов Apache на предмет дублирующихся портов и пересекающихся ServerAlias.
  5. Перезагрузите веб-сервер: sudo systemctl reload apache2 # или httpd.
Защита от атак (RFC 6066 & Domain Fronting): Проверка соответствия SNI и HTTP-заголовка Host введена в ядро Apache для предотвращения атак типа HTTP Request Smuggling и обхода списков контроля доступа (ACL) через мультиплексирование чужих TLS-сессий.
Практический опыт инженера: В 90% случаев в enterprise-среде ошибка AH02032 вызвана забытой директивой `proxy_ssl_server_name on;` в Nginx, из-за чего Nginx отправляет IP-адрес вместо домена в TLS SNI.

Частые вопросы (FAQ)

Что такое SNI (Server Name Indication)?

SNI — это расширение протокола TLS, позволяющее клиенту передать доменное имя запрашиваемого сайта на этапе первоначального рукопожатия (до передачи HTTP-заголовков), чтобы сервер выбрал нужный SSL-сертификат.

Почему Apache возвращает именно ошибку 400 Bad Request?

Потому что передача разных доменов в SNI и заголовке Host рассматривается протоколом HTTP/1.1 и спецификацией TLS как поврежденный или потенциально вредоносный запрос.

Как протестировать SNI вручную через OpenSSL s_client?

Выполните команду: openssl s_client -connect 127.0.0.1:443 -servername site-a.com и затем отправьте команду GET / HTTP/1.1 с Host: site-a.com.

Можно ли отключить проверку соответствия SNI и Host в Apache?

В актуальных версиях Apache 2.4 эта проверка является частью ядра безопасности mod_ssl и жестко включена для предотвращения уязвимостей CVE.