Недавно я переместил свои серверы от одного провайдера к другому и начал получать эти сообщения в журнале ошибок apache: "Ошибка запроса: ошибка чтения заголовков"
Пример из журнала ошибки и соответствующего доступа к apache:
ApacheServer$ cat error_log
ApacheServer [Tue Jan 20 11:07:44 2015] [error] [client x.x.x.x] request failed: error reading the headers
ApacheServer$ cat access_log
x.x.x.x - - [20/Jan/2015:11:06:44 +0200] "GET SomeRandomRequest HTTP/1.1" 400 226 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; BRI/2; MAARJS)" "-"
Должен признать, что кроме версии php (с 5.3 на 5.4) ничего не изменилось.
Я не вижу отношения к какому-то конкретному браузеру или какому-то конкретному запросу, это совершенно случайно.
Также это не может быть проблемой переключателя, потому что у меня такая же проблема на других моих серверах apache, которые не используют один и тот же переключатель.
До сих пор я пытался:
- обновить драйвер сетевой карты
- увеличить RX с 256 до 4096 с помощью: ethtool -G eth1 rx 4096
- привязать вторую сетевую карту к интерфейсу
- гуглите эту проблему много раз, но не нашли решения или той же проблемы.
Версия сервера: Apache / 2.2.15-39 (Unix)
Centos 6.5
Вероятно, это проблема клиента, но почему вы не поняли ее раньше, я не могу сказать.
Ошибка регистрируется, когда Apache получает запрос, который не завершается до конца раздела заголовков. Итак, как минимум Apache получил строку запроса, например. GET / HTTP/1.0
но после этого был отправлен действительный набор заголовков.
Таким образом, это может быть либо полное отсутствие заголовков, либо набор заголовков без пустой строки, обозначающей границу между заголовками и телом запроса.
Я предполагаю, что время ожидания PHP по умолчанию могло быть изменено между двумя вашими установками, поэтому это стоит проверить, но на самом деле это показатель того, что плохой (или медленный) клиент делает запросы к вашему веб-серверу.