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

Как я могу установить использование 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, или, возможно, укажите мне более подробные ресурсы?

Вам не нужно вносить какие-либо изменения в 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-адрес, относящийся к конфигурации балансировщика.

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

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

    компакт-диск Tomcat-Connectors-1.2.28-SRC / родной

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

    делать

    cp apache-2.0 / mod_jk.so / usr / локальный / 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 при развертывании как warball.