Я получаю ошибку 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