Назад | Перейти на главную страницу

mod_proxy на Apache 2.2.3 при проксировании на Tomcat 5.5 возвращает ошибку 502 Bad Gateway

Я получаю ошибку 502 неверного шлюза при использовании mod_proxy на Apache 2.2.3, проксирующем Tomcat 5.5.

Он работает правильно при использовании напрямую через Tomcat (а не через mod_proxy), поэтому я предполагаю, что проблема связана с Apache. Проблема возникает, когда запрос принимает дольше, чем обычно, но я еще не видел никакой закономерности. Иногда две секунды - это слишком долго, иногда семь.

Tomcat используется для размещения приложения на основе Groovy / Grails.

В конфигурации Apache vhost есть следующие соответствующие записи:

ProxyRequests Off
ProxyTimeout 1800

<Proxy *>
 Order deny,allow
 Allow from all
</Proxy>
<Location />
ProxyPass http://DOMAIN:8180/
ProxyPassReverse http://DOMAIN:8180/
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
</Location>
UseCanonicalName off
HostNameLookups off

Обратите внимание, что я добавил ProxyTimeout в попытке решить проблему (помогал в подобных ситуациях в прошлом), это не помогло.

Эти две строки старые, без них ситуация еще хуже - ошибка 502 практически на каждом запросе.

SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1

Обновить

Вы пробовали отслеживать количество занятых потоков в Tomcat? Возможно, Apache не выпускает их должным образом.


Первая попытка, не работает

Обратный поиск имени для DOMAIN?

Я собираюсь бессовестно заткнуть мой ответ о переполнении стека. Обратите внимание, что это позволяет вам использовать localhost вместо DOMAIN.

<VirtualHost *:80>
  ServerName public.server.name

  ProxyRequests Off
  ProxyPreserveHost On

  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>

  ProxyPass / http://localhost:8180/
  ProxyPassReverse / http://localhost:8180/
</VirtualHost>

Хотя это не прямой ответ на ваш вопрос, но мы использовали прокси Apache2 <-> Tomcat5 следующим образом. Работал как шарм.

RewriteRule ^/$ http://apache.domain/appname/ [R]
RewriteRule ^/appname(.*)$ http://tomcat.domain:8081/appname$1 [P]
ProxyPassReverse /appname http://tomcat.domain:8081/appname