Понимание "408 запросов времени ожидания" на Apache с PHP

Описание проблемы - журналы Apache

Я нашел элементы, похожие на этот, в файле журнала Apache:

166.147.68.243 [24/Feb/2013:06:06:25 -0500] 19 web-site.com "-" 408 - "-"

У меня есть собственный формат журнала и 408 здесь означает статус. Формат журнала:

LogFormat "%h %t %D %V \"%r\" %>s %b \"%{User-agent}i\"" detailed

И обычно строка в файле журнала выглядит так

184.73.232.108 [26/Feb/2013:08:38:16 -0500] 30677 www.site.com "GET /api/search... HTTP/1.1" 200 205 "Zend_Http_Client"

Вот почему 408 строк ошибок выглядят странно для меня. Ни один запрос не зарегистрирован, и я понятия не имею, что должно быть оптимизировано.

Вопросы

Как решить проблему? Какую дополнительную информацию или журналы я должен собрать? Что может вызвать проблему? Это что-то не так на сервере? Или это проблема с подключением к сети?

Я обращаюсь к этому, потому что наш клиент пожаловался, что у него ошибка 408 на его мобильном телефоне. Я нашел много записей в файле журнала, но должен признать, что не знаю, что с этим делать.


Мое собственное исследование

Есть несколько вопросов на эту тему уже здесь. Но люди гораздо конкретнее. Как будто они обсуждают проблемы с некоторыми конкретными клиентскими программами и скриптами. Здесь я только что получил ошибку при открытии какой-то страницы на iPhone.

Например, в HTTP, 408 Время ожидания запроса, предлагается выполнить запрос GET до POST. Если у меня есть собственный клиент, я могу это сделать. Но я не могу контролировать поведение браузера пользователя.

Угадай №1

При поиске в интернете и обдумывании проблемы я обнаружил https://serverfault.com/questions/383290/too-many-408-error-codes-in-access-log

Предлагаем обновить Timeout Параметр config возвращается к значению по умолчанию.

#
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 300

Сначала я попробовал значение 30, потому что я думал, что 30 секунд должно быть достаточно. Но даже при значении по умолчанию 300 секунд я продолжаю получать ошибки в журнале. я сделал tail -f когда я писал этот текст и получил более 10 строк за несколько минут.

Для меня это не выглядит полным решением.

3 ответа

Решение

После некоторых исследований по теме я пришел к следующему ответу. Это предоставлено нашим ведущим разработчиком, и я думаю, что это дает хорошее объяснение предмета.

Эти ошибки совершенно нормальные. Они не являются признаком более серьезной проблемы, но обычные соединения, которые держат Apache открытым дольше, чем разрешено.

Например, клиентские запросы, выполняющие их снова и снова, оставляют Apache открытым. Апач ответил, закрыв его соответствующим образом.

Если это не так, то горстка людей может захватить наш сервер и не позволить кому-либо еще подключиться.

Чаще всего эти ошибки происходят от систем, ищущих эксплойты, и вы можете воссоздать их, открыв сеанс telnet и оставив его открытым.

В то же время, хвост -f журнала доступа, и в течение X времени (KeepAliveTimeout) вы увидите всплывающее окно IP с теми же кодами ошибок.

Когда-то во времена Apache 1.3 эта ошибка была распространенной, но затем вышла 2.2, и они удалили ее, пока достаточное количество нас не попросило ее вернуть, поскольку это дает нам представление о том, сколько людей держат открытыми только порт, и не запрашивая реальный ресурс и т. д.

Я думаю, что здесь ничего не следует делать, кроме как для того, чтобы установить для Timeout какое-то разумное значение, как я описал в оригинальном вопросе.

На самом деле, многие 408 сообщений в журналах Apache являются механизмом предварительной выборки в современных браузерах. При просмотре журналов apache за последние 3 года количество 408 ошибок более чем удвоилось для одного и того же трафика.

Если в Apache настроен прокси-сервер, а серверная часть по какой-то причине не отвечает своевременно, то в журналах будут отображаться те же 408 -. Тайм-ауты прокси настраиваются отдельно, поэтому изменение тайм-аута Apache по умолчанию, похоже, не влияет на эти запросы.

Все HTTP-запросы поддерживают имя пользователя и пароль. Нет имени пользователя ="-", нет пароля ="-", пароль ="*".

Другие вопросы по тегам