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

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

Я установил Apache Tomcat и Apache Webserver в системе Ubuntu 10.04 Server. Я в основном следил за этими шаги чтобы настроить соединитель mod-jk, и теперь мой веб-сервер перенаправляет весь трафик на Tomcat.

Это означает, что независимо от того, использую ли я порт 80 или 8080, мне предоставляется содержимое каталога Tomcat ROOT. Это нормально, но я все же хотел бы иметь возможность использовать Apache для обслуживания статического и PHP-контента (например, PHPMyAdmin).

Если вы выбираете популярный вариант mod_jk, ответ Оскара правильный. Вам нужно ограничить то, что обрабатывается Tomcat, изменив что-то вроде этого:

JkMount /* ajp13_worker

... только пути, которые вы хотите обработать Tomcat, например:

JkMount /*.jsp ajp13_worker
JkMount /*.cfc ajp13_worker
JkMount /*.cfm ajp13_worker

Если вы ищете дополнительные параметры, также можно использовать mod_proxy_http или mod_proxy_ajp. Я продолжу пару быстрых примеров для проксирования запросов * .jsp / *. Cfm / *. Cfc к Tomcat ...

Если вы хотите попробовать оба варианта, начните с включения обоих модулей (и любых зависимостей), что очень просто с Ubuntu 10.04 ;-)

sudo a2enmod proxy_http proxy_ajp
sudo /etc/init.d/apache2 restart

Мне нравится добавлять свою конфигурацию прокси в /etc/apache2/conf/httpd.conf в Ubuntu, но вы также можете поместить это только в одну или несколько конфигураций VirtualHost.

Чтобы разрешить использование любого прокси, при условии, что вы используете Apache и Tomcat на одном сервере, вам нужно добавить такую ​​директиву:

<Proxy *>
    Allow from 127.0.0.1
</Proxy>

Вот конфигурация с использованием mod_proxy_ajp:

ProxyPreserveHost On
ProxyPassMatch  ^/(.+\.cf[cm])(/.*)?$  ajp://localhost:8009/$1$2
ProxyPassMatch  ^/(.+\.jsp)$  ajp://localhost:8009/$1

Очевидно, что регулярные выражения можно настроить в соответствии с вашими потребностями (две вышеуказанные директивы ProxyPassMatch могут быть даже довольно легко объединены в одно регулярное выражение).

Чтобы сделать то же самое с mod_proxy_http, просто измените протокол и порт:

ProxyPreserveHost On
ProxyPassMatch  ^/(.+\.cf[cm])(/.*)?$  http://localhost:8080/$1$2
ProxyPassMatch  ^/(.+\.jsp)$  http://localhost:8080/$1

Если вы хотите проксировать определенные хосты и, возможно, замаскировать контекстный путь, вы можете предпочесть что-то вроде этого в конкретном VirtualHost:

ProxyPreserveHost Off
ProxyPass        / http://example.site.com:8080/context/
ProxyPassReverse / http://example.site.com:8080/context/

Наконец, если вам нужно пофантазировать (скажем, что-то странное, вроде проверки строки запроса или чего-то еще, что вы можете придумать с помощью RewriteCond / RewriteRule), вы даже можете использовать mod_rewrite с флагом прокси (P) для прокси-сервера Tomcat. Вам нужно будет включить еще один модуль, mod_rewrite:

sudo a2enmod rewrite
sudo /etc/init.d/apache2 restart

Затем в VirtualHost вы можете проксировать запросы CFML с помощью:

RewriteEngine On
RewriteRule  ^/(.*\.cf[cm]l?)(/.*)?$  ajp://localhost:8009/$1$2  [P]

Как видите, вы можете проявить изобретательность: P Надеюсь, это поможет!

Используйте JkUnmount для вещей, которые вам не нужно обслуживать с помощью tomcat:

JkMount / * ваш рабочий
JkUnMount /*.php yourworker
JkUnMount /*.png yourworker
JkUnMount /*.jpg yourworker
и т.д...

(Не уверен, что вы можете это сделать: JkUnMount /*.{php|jpg|gif|png|etc ..})

Или, если вы используете только jsp для tomcat, попробуйте:

jkMount /*.jsp рабочий