Miałem do czynienia z tym samym problemem i wypróbowałem Twoje rozwiązanie. Choć działało mniej więcej, wciąż było kilka usterek. Szczerze mówiąc, bardziej przypomina to walkę z objawami, niż leczenie choroby.
Więc oto co ostatecznie pracował dla mnie:
Zamiast ustawiania wdrożeń siebie przez ścieżkę, ja przypisany każdej wdrożenie do własnego portu:
foo.war <-- http://localhost:8080/ -- | Proxy | <-- http://www.foo.com -- | Client |
bar.war <-- http://localhost:8181/ -- | Proxy | <-- http://www.bar.com -- | Client |
ten sposób oba wdrożeń są w stanie use/jako ścieżkę kontekstu, dlatego nie trzeba edytować ścieżki kontekstu.
Aby to osiągnąć, nie trzeba uruchamiać dwóch serwerów aplikacji. W moim przypadku (JBoss Application Server 10.0), to było wystarczające, aby określić dwa serwery cofająca w JBoss Application Server konfiguracji, każdy z własnym wirtualnym hosta i http słuchacza, tak:
<server name="foo-server">
<http-listener name="foo-listener" proxy-address-forwarding="true" socket-binding="foo-http"/>
<host name="foo-host" default-web-module="foo.war" alias="localhost, foo.com, wwww.foo.com"/>
</server>
<server name="bar-server">
<http-listener name="bar-listener" proxy-address-forwarding="true" socket-binding="bar-http"/>
<host name="bar-host" default-web-module="bar.war" alias="localhost, bar.com, wwww.bar.com"/>
</server>
<socket-binding name="foo-http" port="${jboss.http.port:8080}"/>
<socket-binding name="bar-http" port="${jboss.http.port:8181}"/>
Będziesz również potrzebował JBoss-web.xml w projekcie:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<server-instance>foo-server</server-instance>
<virtual-host>foo-host</virtual-host>
<context-root>/</context-root>
</jboss-web>
Dwa serwery są potrzebne, ponieważ nie można dodać powiązania gniazda z hostem wirtualnym. Tak więc tutaj jest niewielki narzut, ale nieistotny w porównaniu do uruchomienia dwóch kompletnych serwerów aplikacji.
Edit 1:
To właśnie doszło do mnie, że to chyba nie trzeba nawet używać różnych portów i za pomocą jednego serwera cofająca za deplyoment jest chyba zbędny, jak również.
Ponieważ serwer proxy może przekazywać host zgodnie z żądaniem klienta do serwera aplikacji, program powinien być w stanie wybrać właściwy host wirtualny za pomocą parametru aliasu.
W zasadzie proxy przekazuje dowolne żądanie do strony foo.com lub bar.com do localhost: 8080 i pozwala AS sortować rzeczy.
Nie testowałem tego, ale oto jak to może działać (ponownie, to dla JBoss Application Server 10.0):
<server name="default-server">
<http-listener name="http" proxy-address-forwarding="true" socket-binding="http"/>
<host name="foo-host" default-web-module="foo.war" alias="foo.com, wwww.foo.com"/>
<host name="bar-host" default-web-module="bar.war" alias="bar.com, wwww.bar.com"/>
</server>
I jboss-web.xml straciłaby tag serwera:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<virtual-host>foo-host</virtual-host>
<context-root>/</context-root>
</jboss-web>
W przypadku, gdy to zadziała, nie byłoby w ogóle miejsca na koszty ogólne.
Edit 2:
Właśnie testowałem uproszczone podejście - Tak, to działa :)
Uwaga: to może być również wykonane z 'Filter' i mniej niż połowa kodu. – BalusC
@BalusC, dzisiaj miałem zamiar zaimplementować twoje rozwiązanie Filter, ale przestraszyłem się, że twój post został usunięty)) – Osw
Ja tylko go skasowałem, ponieważ nie było to warte wysiłku. – BalusC