2010-09-08 5 views
0

У меня есть два общедоступных веб-сайта (foo.com и bar.com), которые указываются на балансировщик оборудования. Это аппаратное перенаправляет трафик на мой сервер следующим образом:Маршрут двух доменов к тому же экземпляру JBoss

http://foo.com ==> порт 7700
https://foo.com ==> порт 7701

http://bar.com ==> порт 7800
https://bar.com ==> порт 7801

Мой сервер в настоящее время является старым ящиком iPlanet который определяет два виртуальных сервера (foo.com для 7700, 7701 и bar.com для 7800, 7801). Поскольку балансировщик нагрузки направляется прямо к этим портам, все работает нормально.

Теперь мне нужно перенести эти веб-сайты в конфигурацию Apache 2.2 + JBoss 6.0, и я в настоящее время не понимаю, что лучше всего сделать для этого.

Я уже настроил Apache для прослушивания моих четырех портов (7700,7701,7800, 7801) и настроил SSL для 7701,7801. Я предполагаю, что предпочтительно, чтобы Apache обрабатывал SSL-подтверждения и соединения. Я создал 4 виртуальных записи хостов в Apache следующим образом:

<VirtualHost *:7700> 
    DocumentRoot "/htdocs/foo.com" 
    ServerName foo.com 
</VirtualHost> 
<VirtualHost *:7701> 
    DocumentRoot "/htdocs/foo.com" 
    ServerName foo.com 
    SSLEngine on 
    SSLCipherSuite ALL:... 
    SSLCertificateFile "/cert/foo.com.crt" 
    SSLCertificateKeyFile "/cert/foo.com.key" 
</VirtualHost> 

<VirtualHost *:7800> 
    DocumentRoot "/htdocs/bar.com" 
    ServerName bar.com 
</VirtualHost> 
<VirtualHost *:7801> 
    DocumentRoot "/htdocs/bar.com" 
    ServerName bar.com 
    SSLEngine on 
    SSLCipherSuite ALL:... 
    SSLCertificateFile "/cert/bar.com.crt" 
    SSLCertificateKeyFile "/cert/bar.com.key" 
</VirtualHost> 

Я проверил это со статическим контентом, а как HTTP и HTTPS соединения работают правильно.

Для моей конфигурации JBoss в настоящее время мои приложения развернуты как/foo и/bar, хотя я не знаю, должна ли это быть окончательная конфигурация. То, что я хочу сделать это:

вперед весь трафик от 7700/7701 до http://localhost:8080/foo, и от 7800/7801 до http://localhost:8080/bar. Я не хочу видеть/foo и/bar в общедоступном URL-адресе, однако - пользователь должен просто увидеть http://www.foo.com и http://www.bar.com.

Есть ли способ настроить mod_jk для пересылки запросов на определенный URL-адрес? Или я должен смотреть, как иметь JBoss-хост foo.com на портах A и bar.com на порту B - и просто иметь mod_jk вперед для каждого порта отдельно?

ответ

0

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

Я также хотел бы предложить вам взглянуть на mod_cluster - у него могут быть дополнительные возможности, которые могли бы помочь в этом.

EDIT

Argh. После вашего разъяснения (и лучшего копания), я думаю, что может быть другой ответ. В настоящее время я использую ProxyPass/ProxyPassReverse для перенаправления URL верхнего уровня на отдельные сервлеты.Я снова просмотрел Apache VirtualHost docs, и я думаю, что если вы объедините это с mod_proxy, вы сможете получить то, что хотите.

Вот предлагаемый пример конфигурации, которая основывается на том, что у меня есть, и может удовлетворить ваши требования:

Listen 7700 
Listen 7701 
Listen 7800 
Listen 7801 

<VirtualHost *:7700> 
    ProxyPreserveHost On 
    ProxyPass/http://localhost:8080/foo 
    ProxyPassReverse/http://localhost:8080/foo 
    ServerName foo.com 
</VirtualHost> 

<VirtualHost *:7701> 
    ProxyPreserveHost On 
    ProxyPass/http://localhost:8080/foo 
    ProxyPassReverse/http://localhost:8080/foo 
    ServerName foo.com 
    SSLEngine on 
    SSLCipherSuite ALL:... 
    SSLCertificateFile "/cert/foo.com.crt" 
    SSLCertificateKeyFile "/cert/foo.com.key" 
</VirtualHost> 

<VirtualHost *:7800> 
    ProxyPreserveHost On 
    ProxyPass/http://localhost:8080/foo 
    ProxyPassReverse/http://localhost:8080/foo 
    ServerName bar.com 
</VirtualHost> 

<VirtualHost *:7801> 
    ProxyPreserveHost On 
    ProxyPass/http://localhost:8080/foo 
    ProxyPassReverse/http://localhost:8080/foo 
    ServerName bar.com 
    SSLEngine on 
    SSLCipherSuite ALL:... 
    SSLCertificateFile "/cert/bar.com.crt" 
    SSLCertificateKeyFile "/cert/bar.com.key" 
</VirtualHost> 

я извиняться не хватает это в первый раз. Единственное, что вы хотите протестировать, - убедиться, что URL-адреса для доступа сервлетов правильные. Модель, которую я использую, - http://{host}:{port}/{WARName}/{ServletPath}. Если вы уже протестировали конфигурацию со статическим контентом, нужно добавить/настроить только настройку прокси-сервера. Я не уверен, нужны ли вам операторы Listen или нет; Я думаю, вы будете, поскольку ваши порты нестандартны.

+0

Я не уверен, что переписывание URL будет работать. Я думаю, проблема заключается в том, что я не могу найти способ заставить JBoss прослушивать порт 7700 для обслуживания содержимого для foo.war и прослушивать порт 7800 для обслуживания содержимого для bar.war. Мне очень странно, что JBoss на самом деле прослушивает несколько портов, но не позволяет мне указывать контент, который подается на каждом из них. –

+0

@Fibber - я обновил свой ответ на основе вашего комментария; Я думаю, вы помогли мне найти более простое решение. – mlschechter

+0

Большое спасибо, что сделал трюк! Я должен был внести небольшую корректировку в операторы ProxyPass и ProxyPassReverse, чтобы он работал правильно: я добавил конечную косую черту в имя сервлета, то есть localhost: 8080/foo/- без нее JBoss ищет URI/foofoo:) –

Смежные вопросы