Направьте два домена в один и тот же экземпляр JBoss - PullRequest
0 голосов
/ 08 сентября 2010

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

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 на каждый порт отдельно?

1 Ответ

0 голосов
/ 08 сентября 2010

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

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

РЕДАКТИРОВАТЬ

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

...