Как настроить использование mod_proxy_ajp с Apache и Tomcat?

Как настроить использование mod_proxy_ajp с Apache и Tomcat?

Я хотел бы запустить Apache и Tomcat на сервере RHEL 5, где Apache будет обрабатывать приложения Ruby on Rails (через mod_rails/Passenger), а Tomcat — приложения Java.

Под Apache каждое приложение Rails будет иметь URL и vhost. URL уже настроены на нашем DNS-сервере, чтобы указывать на машину.

В Tomcat каждое Java-приложение имеет URL-адрес следующего вида: ourserver.ourcompany.com/app1, ourserver.ourcompany.com/app2, и т. д.

Сервер уже запущен и работает с Tomcat 6, работающим на порту 80 и обслуживающим несколько приложений Java. Я хочу добавить Apache и перенастроить. Я знаком с тем, как настроить единственный сервер Apache для размещения приложений RoR с помощью Passenger. Я просто не знаю, как заставить Apache и Tomcat работать вместе таким образом.

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

Может ли кто-нибудь предложить пример конфигурации для server.xmlи httpd.confили указать мне на какие-то более подробные ресурсы?

решение1

Вам не нужно вносить никаких изменений в , server.xmlза исключением того, чтобы вернуть Tomcat к портам по умолчанию, чтобы Apache мог обрабатывать порт 80. Основная часть работы будет выполняться через файлы конфигурации Apache. Я обычно оставляю их вне httpd.confи вместо этого вставляю их в более мелкие фрагменты конфигурации в <ServerRoot>/conf.d/подкаталоге.

Учитывая ваш пример ourserver.ourcompany.com/app1&, ourserver.ourcompany.com/app2я бы предположил конфигурацию примерно следующего вида:

<VirtualHost *:80>
    ServerName ourserver.ourcompany.com
    ErrorLog ...
    CustomLog ...

    [other VHost configurations]

    ProxyPass /app1 ajp://tomcat_hostname:8009/app1
    ProxyPassReverse /app1 ajp://tomcat_hostname:8009/app1

    ProxyPass /app2 ajp://tomcat_hostname:8009/app2
    ProxyPassReverse /app2 ajp://tomcat_hostname:8009/app2
</VirtualHost>

Если у вас есть несколько серверов Tomcat, объединенных в кластер, то вам, возможно, стоит рассмотреть настройку mod_balancer и перемещение его ajp://вmod_balancer BalancerMemberи замените balancer://URL-адресом, который ссылается на конфигурацию балансировщика.

решение2

Лично мне mod_proxy_ajp не нравится; при запуске Tomcat под Apache я сразу перехожу к установке mod_jk (модуль от Tomcat coders) для обеспечения соединения AJP. Вы можете настроить mod_jk 5 способами в Sunday для производительности ваших приложений (потоки, тайм-ауты, стуки и т. д.).

  1. Убедитесь, что httpd-devel установлен
  2. Распакуйте настоящий JDK в какой-нибудь каталог, например /usr/local/jdk1.6.0_18/
  3. возьмите исходный код "tomcat-connectors" с tomcat.apache.org и скомпилируйте его

    cd tomcat-connectors-1.2.28-src/native

    ./configure --with-apxs=/usr/sbin/apxs --with-java=/usr/local/jdk1.6.0_18 --enable-prefork

    делать

    cp apache-2.0/mod_jk.so /usr/local/lib/

Теперь вам нужно подключить его к конфигурации Apache в общем смысле, а затем к каждому виртуальному хосту по мере необходимости. В общей конфигурации вы добавляете что-то вроде:

LoadModule jk_module /usr/local/lib/mod_jk.so
JkWorkersFile  /usr/local/tomcat/conf/workers.properties
JkShmFile      /var/log/httpd/mod_jk.shm
JkLogFile      /var/log/httpd/mod_jk.log
JkLogLevel     error

Вам нужно будет создать базовый файл worker.properties, вот документация:http://tomcat.apache.org/connectors-doc/reference/workers.htmlСамый простой вариант может выглядеть так:

workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/local/jdk1.6.0_18
ps=/
worker.list=ajp13
worker.maintain=60
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=ajp13

Это будет использовать конфигурацию порта 8009 по умолчанию из server.xml - здесь есть миллион ручек, которые вы можете крутить здесь для бесконечной настройки производительности. Затем в каждом виртуальном хосте вы "монтируете" нужные вам приложения:

<VirtualHost *:80>
 ServerName foo.bar.com
 ...other options ...

 JkMount /app1/* ajp13
 <Location "/app1/WEB-INF/">
    deny from all
 </Location>

 JkMount /app2/* ajp13
 <Location "/app2/WEB-INF/">
    deny from all
 </Location>

</VirtualHost>

Как вы видите внизу, не забудьте немного о безопасности и запретите любой доступ к папке WEB-INF — большинство веб-приложений имеют свой DSN базы данных с паролем web.xml при развертывании в качестве варбола.

Связанный контент