Вопрос или проблема
Принудительное возникновение ошибки HTTP 421 на всех запросах HTTP2
У меня на сервере настроен Apache 2.4, который обслуживает веб-страницы с протоколом HTTP 1.1. Система в настоящее время не готова обрабатывать HTTP2 (пожалуйста, не спрашивайте, почему).
При просмотре журналов сервера я увидел несколько таких запросов в моем access_log
PRI * HTTP/2.0 400 18 - -
Я хочу предотвратить излишнюю нагрузку на мой сервер из-за таких запросов от Google. Я посмотрел здесь в Google: https://developers.google.com/search/docs/crawling-indexing/googlebot, и там говорится, что я должен выдавать код ошибки HTTP 421, чтобы решить свою проблему. Мой сервер производит код ошибки 400, а не 421.
Вместо того, чтобы пытаться разобраться, как создать модуль для Apache, есть ли какая-либо настройка, которую я могу использовать в httpd.conf, или какой-то готовый модуль, который я могу использовать, чтобы все запросы HTTP2 выдавали ошибку 421, чтобы мои журналы не были чрезмерно загружены?
Google действительно утверждает, что для отказа от обхода по HTTP/2 вы можете приказать серверу отвечать с кодом состояния 421 HTTP.
Вы можете достичь этого, используя следующее в Apache:
<If "%{HTTP2} == 'on'">
Header set Status "HTTP/1.1 421 Misdirected Request"
</If>
Предупреждение: Имейте в виду, что поисковые системы могут решить не индексировать URL, который возвращает статус ответа 421 Misdirected Request. Кроме того, ранее индексированные URL, которые теперь возвращают этот код статуса, могут быть удалены из результатов поиска. Пожалуйста, будьте очень осторожны при реализации этого решения.
Ответ или решение
Для того чтобы предотвратить обработку запросов HTTP/2 на вашем сервере Apache 2.4 и отправить статус 421 (Misdirected Request), вы можете использовать директиву Header
в вашем файле конфигурации httpd.conf
. Это позволит вам отклонять все запросы, которые приходят с использованием протокола HTTP/2.
Вот шаги, которые необходимо выполнить:
-
Откройте файл конфигурации Apache, обычно это
httpd.conf
, с помощью текстового редактора с правами администратора. -
Добавьте следующую конфигурацию в ваш файл:
<If "%{HTTP2} == 'on'"> Header set Status "HTTP/1.1 421 Misdirected Request" RewriteRule .* - [R=421,L] </If>
Данная конфигурация делает следующее:
- Проверяет, является ли запрос HTTP/2.
- Если да, то устанавливает заголовок состояния в "HTTP/1.1 421 Misdirected Request".
- Затем использует модуль
Rewrite
, чтобы отменить дальнейшую обработку запроса и вернуть статус 421.
-
Убедитесь, что у вас активированы необходимые модули Apache. Для использования директивы
Header
и модуляRewrite
необходимо, чтобы модули были активированы. Вы можете сделать это, добавив или раскомментировав следующие строки в вашем конфигурационном файле:LoadModule headers_module modules/mod_headers.so LoadModule rewrite_module modules/mod_rewrite.so
-
После внесения изменений в конфигурационный файл не забудьте перезагрузить Apache, чтобы ваши изменения вступили в силу:
sudo systemctl restart httpd
Важно: Пожалуйста, будьте осторожны с использованием статуса 421. Согласно рекомендациям поисковых систем, URLs, которые возвращают этот статус, могут быть исключены из индексации и, возможно, удалены из результатов поиска. Убедитесь, что вы понимаете последствия этой настройки.
Данная конфигурация позволит вам ограничить запросы HTTP/2 и уменьшить нагрузку на сервер, обеспечивая возврат соответствующего статуса для таких запросов.