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

Apache VirtualHost и ModProxy не работают должным образом

У меня есть 3 войны, настроенные на экземпляре Tomcat - эти войны обслуживаются в:

У меня Apache на той же машине. Я пытаюсь настроить Apache, чтобы получить доступ к трем войнам следующим образом:

Я пробовал следовать примеру Совместное использование Virtual_Host и mod_proxy, но он работает некорректно. Когда я приезжаю http://war1.mycompany.com/ браузеру отправляется 302 в направлении http://war1.mycompany.com/war1/ а это взамен дает 400 ошибка.

Если я приеду http://war1.mycompany.com:9023/war1 (т.е. запросить Tomcat напрямую), тогда я получаю ожидаемый сайт, так что DNS настроен правильно, и война развернута правильно.

Мой файл конфигурации Apache (/etc/httpd/conf.d/sites.conf) как следует:

Listen 9024
<VirtualHost *:9024>
    ServerAdmin admin@mycompany.com
    ServerName war1.mycompany.com
    ErrorLog logs/error_log
    CustomLog logs/access_log common
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:9023/war1
    ProxyPassReverse / http://127.0.0.1:9023/war1
</VirtualHost>

Я использую Apache 2.2.3 и Tomcat 6.0.14. Tomcat настроен почти нормально:

<Host name="localhost"  appBase="webapps"
    unpackWARs="true" autoDeploy="true"
    xmlValidation="false" xmlNamespaceAware="false">
  <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
       prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
</Host>

Войны в CATALINA_HOME/webapps/war1.war, и т.д.

Что я делаю не так? Есть ли что-то, что я должен искать в основной конфигурации Apache?

Быстрое редактирование: вы уверены, что Apache выдает ошибку 400, кстати? Используйте 'curl -v' и проверьте трафик заголовка, чтобы убедиться, что это Apache 400.

Хммм это выглядит право. У вас есть 'NameVirtualHost : 9024 "где-то в вашей конфигурации? И вы уверены, что mod_proxy модули действительно включаются через LoadModule где-нибудь?

Попробуйте использовать альтернативный метод:

<Location />
  ProxyRequests Off
  ProxyPreserveHost On
  ProxyPass http://127.0.0.1:9023/war1
  ProxyPassReverse http://127.0.0.1:9023/war1
  #
  # Perhaps your Tomcat is HTTP/1.1 buggy?
  SetEnv force-proxy-request-1.0 1
  SetEnv proxy-nokeepalive 1
</Location>

Я предлагаю настроить «Отладку LogLevel» для проверки фактического трафика, чтобы определить, что идет не так.