Я хотел бы обслуживать клиентов с поддержкой SNI, которые отправляют неправильное имя хоста с ошибкой 400 Bad Request, но Apache всегда обслуживает виртуальный хост по умолчанию в этой ситуации. Я не могу добавить виртуальный хост по умолчанию, который отправляет 400 Bad Request status, потому что клиенты с отключенным SNI всегда будут получать этот виртуальный хост.
Похоже, что Название сервера Директива виртуального хоста игнорируется для клиентов с отключенным SNI, когда я включаю виртуальные хосты на основе имени в установке Apache с поддержкой SNI.
См. Следующую конфигурацию виртуального хоста:
NameVirtualHost 192.168.4.46:443
<VirtualHost 192.168.4.46:443>
ServerName 192.168.4.46
DocumentRoot /var/www/error-page/
SSLEngine on
SSLCertificateFile /path/to/certificate.crt
SSLCertificateKeyFile /path/to/certificate.key
</VirtualHost>
<VirtualHost 192.168.4.46:443>
ServerName test-ssl
DocumentRoot /var/www/valid-website/
SSLEngine on
SSLCertificateFile /path/to/certificate.crt
SSLCertificateKeyFile /path/to/certificate.key
</VirtualHost>
Если я использую клиент с отключенным SNI, я получаю страницу с ошибкой несмотря на из Хост: заголовок отправляю в запросе. Поскольку я использую один и тот же сертификат на обоих виртуальных хостах, я хотел бы, чтобы клиенты с отключенным SNI могли по-прежнему подключаться ко второму виртуальному хосту на основе совпадения с Название сервера.
Если бы я переключил положение виртуальных хостов, веб-сайт был бы виртуальным хостом по умолчанию, а затем SNI-включен клиенты получат веб-сайт вместо ошибки, если они укажут неправильный Хост: в заголовках.
Итак, как мне заставить Apache выдавать ошибку при каждой ошибке? Хост: заголовок независимо от поддержки SNI, при этом все еще обслуживая веб-сайт при использовании клиента с отключенным SNI и обслуживая право виртуальный хост при использовании клиента с поддержкой SNI?
Удалите ServerName в виртуальном хосте, который вы хотите использовать в режиме ошибки. Должно работать
Я полагаю, что кратчайший ответ будет:
MOD_REWRITE
Установите cond для проверки заголовка хоста; Если это неверно, перенаправьте запрос на страницу с ошибкой.
Ваш сайт без ошибок будет по умолчанию, и правило перезаписи будет жить на этом виртуальном хосте.
Если окажутся «короче / проще» варианты, я подозреваю, что этот вариант обеспечит четкую логику обработки запросов. Это решение предполагает, что вы хотите ВСЕ независимо от статуса SNI запрашивает соответствующий заголовок хоста для данного виртуального хоста.