2012-03-30 2 views
4

Я вижу проблему при отправке файла через Apache, настроенного как прокси, в локальное приложение с использованием веб-сервера Mongoose.Apache возвращает 502 Bad Gateway с mod_proxy и большим файлом

Моя установка:

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

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

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

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

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

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

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

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

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

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

ответ

4

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

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

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

+0

Благодарим за сообщение. У меня была такая же проблема, и действительно Jetty, обеспечив реальный ответ, ответил на 401, который был переведен Apache на 502. – ctron

+0

Как решить эту ошибку –

+0

@ d'Scribe Эта ошибка была зарегистрирована с 2013 года (вероятно, существовала много лет до этого), и она по-прежнему не исправлена. Ваши варианты ограничены и сходятся к переключению на другой обратный прокси-сервер, например. Nginx. –