Недавно я перенес сайт WordPress с небольшим магазином от хостинг-провайдера на свой собственный сервер с Ubuntu Server 12.04.2 LTS и Apache 2.2.22. Мне требуется SSL для магазина. Я настроил пару простых vhosts на новом IP для сервера, один привязал к порту 80 определенного IP, а другой привязал к порту 443. Оба имеют ServerName www.example.com
и ServerAlias example.com
в конфигурации vhost. У меня есть SSLStrictSNIVHostCheck off
.
Сайт работает очень медленно, но работает. В журналах ошибок я получаю следующее.
[Error] Hostname example.com provided via SNI and hostname www.example.com provided via HTTP are different
Я предполагаю, что замедление связано с сообщением выше. Есть идеи, почему это появляется и что я могу с этим сделать?
решение1
Посмотрите на свой журнал доступа (не журнал ошибок). Зная время и дату ошибки, вы сможете определить нарушающий запрос и выяснить агента пользователя. В моем случае это был бот:
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2)"
Мой сервер отвечает HTTP 400: Bad Request.
Если я не ошибаюсь, при согласовании TLS клиент отправляет имя хоста дважды: один раз ДО того, как SSL-соединение будет установлено в SNI (Server Name Indication) и один раз ПОСЛЕ в самом HTTP-запросе. Если имена серверов не совпадают, это будет означать, что клиент сломан, и не должно иметь ничего общего с тем, как настроен ваш сервер.
Может быть, они когда-нибудь исправят своего бота, а пока, наверное, можно его игнорировать. Сомневаюсь, что это может вызвать замедление на хосте, если только запросы не поступают с очень высокой скоростью.
решение2
Может быть, эта ошибка вызвананамереннонекоторыми клиентами для проверки уязвимостей вашего сервера. Я обнаружил, что запрос от researchscan367.eecs.umich.edu
вызвал ошибку на сервере, который я обслуживаю. В этом случае хорошо, что ошибка произошла.
Мне стало интересно, какие виды атак возможны, и я задал этот вопрос на Security Stack Exchange:Какой тип атаки предотвращает код ошибки Apache2 AH02032?
решение3
В моем случае проблема была в создании нового виртуального хоста с подчеркиванием. У меня есть wildcard SSL-сертификат.
Не сработало:
<VirtualHost *:443>
SSLEngine on
ServerName sub_domain.example.com
Redirect / https://www.example.com/restofmyredirectlink
</VirtualHost>
Хотя Apache успешно перезапустился, я получил ошибки HTTP 400. В журнале ошибок:
[Wed Sep 05 11:28:00.349960 2018] [ssl:error] [pid 19906:tid 140392626808576] AH02031: Hostname sub_domain.example.com provided via SNI, but no hostname provided in HTTP request
Но удаление подчеркивания сработало:
<VirtualHost *:443>
SSLEngine on
ServerName subdomain.example.com
Redirect / https://www.example.com/restofmyredirectlink
</VirtualHost>
решение4
Проверьте файл /etc/hosts, чтобы увидеть, назначаете ли вы доменное имя локальному (внутреннему) IP-адресу. Не забудьте перезапустить демон кэширования службы имен после изменения /etc/hosts service nscd restart