Как иметь 2 разных веб-сервера/сервера приложений для одного и того же домена, но с другим контекстным путем?

Я запускаю стандартное PHP-приложение в своем домене и установил для него значение www.johndoe.com/p/.

Теперь порт 80, по-видимому, обслуживается этим HTTP-сервером (Apache, а не Tomcat). Кроме того, я установил Wildfly 8.2 на этот сервер через порт 8000. Как я могу использовать приложения Wildfly WAR в том же домене, например. www.johndoe.com/w/?

Я уверен, что есть способ перенаправить запросы /w/ на сервер Java EE и оставить /p/ обслуживаемым Apache, верно?

Я предполагаю, что mod_proxy (http-шлюз) и mod_proxy_ajp — простые решения. Кто-нибудь может подумать о моих требованиях и функциональности mod_proxy/ajp?

ProxyPass /w ajp://localhost:8000/w
ProxyPassReverse /w http://www.johndoe.com/w

Я не требую балансировки нагрузки или чего-то еще сложного. Просто раскол двух контекстов. Из Интернета доступен только порт 80.

Спасибо.


person feder    schedule 09.03.2015    source источник
comment
Если вы введете www.johndoe.com/p/ или www.johndoe.com/w/ в браузере, он должен и будет обслуживаться apache, а если вы наберете то же самое, но с определенным портом (www.johndoe.com:8000/p/), он должен обслуживаться wildfly   -  person winston86    schedule 09.03.2015
comment
@winston86 Да, это так. Да, но у меня на сервере порт 8000 закрыт. Так что мне нужно пройти через 80. Просто спрашиваю, так ли это просто, как записать эти 2 строки ProxyPass на HTTP-сервер Apache (и активный AJP в Wildfly).   -  person feder    schedule 09.03.2015
comment
Это невозможно сделать. Wildfly должен прослушивать какой-то интерфейс и порт. Вам необходимо разрешить в настройках брандмауэра принимать и возвращать данные через порт 8000. Вы можете перенаправить www.johndoe.com/p/ на www.johndoe.com:8000/p/, но пакеты будут отбрасываться из-за брандмауэра.   -  person winston86    schedule 09.03.2015
comment
@winston86 Почему это должно быть так? Это тот же сервер. Как только запрос находится внутри брандмауэра, с сервером Apache он может использовать любой протокол и имя хоста. например ajp://localhost:8000/w Кроме того, я пытаюсь выполнить маршрутизацию для johndoe.com/w и не для ...doe.com/p   -  person feder    schedule 09.03.2015
comment
Ну, вы можете попробовать перенаправить через петлевой интерфейс, но проблема остается той же, вам нужно разрешить порт 8000 на интерфейсе в брандмауэре и настроить wildfly для его прослушивания. Но если вам нужно взаимодействовать с wildfly, выходные пакеты будут отброшены.   -  person winston86    schedule 09.03.2015


Ответы (1)


Хорошо. Здесь разрешение.

Я добавил в Wildfly 8.2 standalone.xml следующий ajp-listener...

<server name="default-server">
    <http-listener name="default" socket-binding="http"/>
    <ajp-listener name="ajp" socket-binding="ajp"/>
    <host name="default-host" alias="localhost">
    <location name="/" handler="welcome-content"/>
        <filter-ref name="server-header"/>
        <filter-ref name="x-powered-by-header"/>
    </host>
</server>

... и привязать его к сокету ...

<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
    <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
    <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/>
    <socket-binding name="ajp" port="${jboss.ajp.port:28009}"/>
    <socket-binding name="http" port="${jboss.http.port:28080}"/>
    <socket-binding name="https" port="${jboss.https.port:28443}"/>
    <socket-binding name="txn-recovery-environment" port="4712"/>
    <socket-binding name="txn-status-manager" port="4713"/>
    <outbound-socket-binding name="mail-smtp">
        <remote-destination host="mail.johndoe.com" port="25"/>
    </outbound-socket-binding>
</socket-binding-group>

Вызовите service wildfly reload или service wildfly restart. Чтобы Wildfly прослушивал AJP-запросы.

Наконец, добавьте в файл http.conf вашего домена виртуального хоста Apache следующее:

ProxyPass /w ajp://127.0.0.1:28009/w
ProxyPassReverse /w ajp://127.0.0.1:28009/w

Также для Apache перезапустите с помощью service apache2 reload.

Осторожность. В Parallels Plesk файл конфигурации виртуального хоста необходимо редактировать в /var/www/vhosts/system/johndoe.com/conf/http.conf, а НЕ в /var/vhosts/johndoe.com/conf/http.conf.

person feder    schedule 15.03.2015
comment
Очень четко и прямо в точку. Это сработало отлично для меня - person alexander; 26.12.2016