502 Bad Gateway ... неверный ответ от вышестоящего сервера (apache и jboss) - PullRequest
4 голосов
/ 10 июля 2009

Я использую apache на одной машине для обслуживания запросов к jboss на другой машине. Все работает нормально, когда я запускаю jboss, и я могу получить доступ к веб-приложению, но через несколько часов я в конечном итоге получаю ошибки «Прокси-сервер получил неверный ответ от вышестоящего сервера». Если я перезапущу jboss, то все снова будет работать нормально, но через несколько часов у меня та же проблема ...

Кто-нибудь знает, что может быть причиной этой проблемы? В настоящее время у меня нет доступа к журналам Apache (я должен через несколько часов), но, похоже, что-то с jboss, поскольку перезапуск это временное исправление.

Я использую jboss4.2.3 и apache 1.3 с mod_jk. Я не нахожу никаких ошибок в журналах jboss, и приложение, к которому я пытаюсь добраться, не делает ничего, что занимает много времени. Главная страница - это просто страница входа в систему. У меня открыты порты 8009 и 8080 для связи между сервером приложений и веб-сервером. Я не знаю, какая конфигурация неправильная.

Ответы [ 4 ]

6 голосов
/ 12 июля 2009

Для меня это звучит так, как будто mod_jk в Apache не синхронизирован с разъемом AJP в JBoss. Протокол AJP использует постоянные, повторно используемые соединения между веб-сервером и сервером приложений, и если протокол не настроен одинаково на обоих концах соединения, в конечном итоге соединения устаревают на одном конце соединения, но на другом конце продолжает пытаться использовать их. Симптом - ошибка 502.

Мое первое предложение таково: не используйте mod_jk без необходимости. Это сложно и сложно настроить, чтобы получить стабильную систему. Если вам не нужна его производительность или функции балансировки нагрузки, я предлагаю вместо этого использовать mod_proxy. Это так же хорошо для большинства приложений, и довольно легко.

Но если вы хотите придерживаться mod_jk, первое, что вам нужно, это убедиться, что вы используете самую последнюю версию mod_jk (в настоящее время 1.2.28), поскольку более старые версии, как известно, сложно настроить. К счастью, mod_jk все еще поддерживается в Apache 1.3.

Затем проверьте файл журнала mod_jk (настраивается с помощью директивы JkLogFile). Если вы видите кучу ошибок, связанных с соединением, в то время, когда что-то идет не так, вам нужно настроить конфигурацию jk на обоих концах соединения. Наиболее вероятный виновник - настройки тайм-аута, поэтому прочитайте о них здесь и убедитесь, что оба конца поют с одного листа гимна.

2 голосов
/ 12 июля 2009

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

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

0 голосов
/ 05 апреля 2018

Если вы подключаетесь Apache с Tomcat и оказались в этом блоге, как и я, это имеет смысл.

Принятие соединения для AJP / 1.3 в Tomcat решило эту ошибку для меня. Не забудьте закомментировать сервис по протоколу HTTP.

**<!--<Connector port="8081" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />
-->
<Connector port="8081" protocol="AJP/1.3"
           connectionTimeout="20000"
           redirectPort="8443" />**
0 голосов
/ 11 ноября 2013

У меня была такая же проблема, но с Apache и Glassfish. Наконец, я могу исправить это, настроив одинаковое время ожидания для обеих сторон.

В Glassfish измените конфигурацию слушателя, а в Apache измените файл worker.properties с помощью этой строки:

worker.worker_name.socket_timeout=300

Я не уверен в том, как настроить это в JBoss, возможно, изменение web.xml или cluster-service.xml.

...