Возможная ошибка в Apache2

Я только что потратил целых 8 часов, отслеживая это, и до сих пор не совсем понимаю, что происходит, поэтому я надеюсь, что кто-нибудь сможет объяснить мне это или подтвердить, что это ошибка, чтобы я мог отправить заявку разработчикам Apache, чтобы пусть знают.

У меня есть веб-сервер Ubuntu 20.04.2 LTS/Apache 2.4.41/mod_wsgi 4.6.8/Django 3.1, на котором недавно начались периодические проблемы с кодированием фрагментов. Я получал «ERR_INCOMPLETE_CHUNKED_ENCODING» в консоли разработчика Chrome. Это затронуло только особенно большой статический файл .js (~220 КБ), поэтому я воспринял это как объяснение того, почему был затронут только этот файл, и попробовал все известные исправления, которые смог найти.

Самым многообещающим было отключение кодирования gzip для этого файла, что, по крайней мере, изменило ошибку, но вместо этого я просто получил «ERR_CONTENT_LENGTH_MISMATCH». В этот момент я понял, что объем загружаемого файла .js различался в зависимости от попытки запроса. Используя Wireshark для отслеживания пакетов, кажется, что сервер иногда просто переставал отвечать раньше времени, поэтому мой клиент закрыл соединение и сообщил о несоответствии длины контента. Каждый раз в синюю луну весь файл .js загружался правильно, но в большинстве случаев это не загружалось, и без него страница не загружалась должным образом.

Итак, переходя к делу, я наконец обнаружил, что причиной, по-видимому, является отключение тайм-аута сервера по умолчанию. У меня было установлено:

Timeout -1

... в apache2.conf, чтобы отключить этот тайм-аут для решения более ранней проблемы (да, это не обязательно лучшее решение с точки зрения безопасности, но это система только для внутреннего использования, и это было наиболее эффективное решение на тот момент) . Установка обратного значения на любое обычное значение (например, 300 по умолчанию) устранила проблему с кодированием фрагментов.

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

Единственное, о чем я могу думать, это наличие отдельной настройки тайм-аута для передачи кодирования фрагментов и-1псевдоним для отключения глобального тайм-аута каким-то образом неправильно влияет на тайм-аут нижнего уровня? В любом случае – любое направление ценится.

Спасибо.

1 ответ

Согласно документации Apache HTTPd, директива Timeout указывается в секундах. Нет упоминания о том, что -1 является магическим значением для отключения тайм-аута.

Возможно, установка тайм-аута на -1 уменьшит эффективный тайм-аут до минимально возможного значения, которое слишком мало для правильной работы httpd.

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