Я хотел бы запустить 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 способами на воскресенье для производительности ваших приложений (потоки, таймауты, удары и т. Д.).
возьмите исходный код "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.