Apache возвращает 502 Bad Gateway с mod_proxy и большим файлом - PullRequest
4 голосов
/ 30 марта 2012

Я вижу проблему при отправке файла через Apache, настроенный в качестве прокси-сервера, в локальное приложение с помощью веб-сервера Mongoose.

Моя настройка:

Apache (порт 80) <-> mod_proxy <-> Mongoose (порт 9090)

mod_proxy настроен для передачи определенных URL-адресов с порта 80 на локальный хост: 9090.

Mongoose принимает только аутентифицированные ответы. Это нормально работает для обычных (маленьких) запросов. Однако при передаче больших файлов Apache возвращает ответ 502 Bad Gateway.

То, что происходит (ну, на самом деле, просто мой анализ того, что происходит), заключается в том, что когда наш клиент (клиент .net, ожидаем, что включено 100) пытается отправить файл, он отправляет заголовки, за которыми непосредственно следует содержимое файла.

Mongoose получает заголовки передачи, обнаруживает, что она не аутентифицирована, возвращает 401 Unauthorized и закрывает соединение. Теперь Apache (который все еще получает и обрабатывает передачу файла) больше не может пересылать данные и возвращает неверный шлюз 502 (прокси-сервер получил неверный ответ от вышестоящего сервера).

При прослушивании на внешнем интерфейсе я вижу, что клиент .net отправляет заголовки, за которыми в течение 20 мсек следует содержимое, без получения 100 Continue. Когда получение закончено, Apache возвращает 502.

При прослушивании внутреннего интерфейса я вижу, что заголовок и тело объединены в один пакет TCP размером 16384 байта. Mongoose отвечает в течение нескольких месяцев с помощью 401 и закрывает соединение.

Похоже, что Apache обнаруживает закрытие соединения, но игнорирует 401 и не пересылает это. Есть ли возможность заставить Apache правильно пересылать 401 вместо ответа 502?

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

Мы используем Apache 2.2.9 (Debian) в системе ARM.

1 Ответ

4 голосов
/ 14 апреля 2015

Возможно, вы столкнулись с ошибкой Apache, поданной здесь https://bz.apache.org/bugzilla/show_bug.cgi?id=55433

Ссылки по теме:

PS: я столкнулся с той же проблемой, и это довольно неясная ошибка (как для поиска информации о ней, так и самой ошибки). FWIW, nginx не имеет такого поведения.

...