Ich hatte das gleiche Problem und versuchte Ihre Lösung. Während es mehr oder weniger funktionierte, gab es immer noch ein paar Pannen. Und um ehrlich zu sein, fühlt es sich eher an, die Symptome zu bekämpfen als gegen die Krankheit zu heilen.
Also hier ist was für mich endlich geklappt:
Statt die Einsätze außer durch den Weg der Einstellung, ich jeden Einsatz der eigenen Port zugeordnet:
foo.war <-- http://localhost:8080/ -- | Proxy | <-- http://www.foo.com -- | Client |
bar.war <-- http://localhost:8181/ -- | Proxy | <-- http://www.bar.com -- | Client |
diese Weise beide Einsätze sind in der Lage Verwenden Sie/als ihren Kontextpfad, daher müssen Sie den Kontextpfad nicht bearbeiten.
Um dies zu erreichen, müssen Sie nicht unbedingt zwei Anwendungsserver ausführen. In meinem Fall (Wildfly 10,0) war es ausreichend, zwei undertow Server in der Wildfly Konfiguration zu definieren, die jeweils mit einem eigenen virtuellem Host und HTTP-Listener, etwa so:
<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}"/>
Sie werden auch ein Jboss-Web benötigen.xml in Ihrem Projekt:
<?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>
Die zwei Server werden benötigt, da Sie keine Socket-Bindung zu einem virtuellen Host hinzufügen können. Es gibt also einen kleinen Overhead, der aber vernachlässigbar ist, verglichen mit dem Ausführen von zwei vollständigen Anwendungsservern.
Edit 1:
Es fiel mir nur, dass es wahrscheinlich nicht einmal notwendig ist, verschiedene Ports zu verwenden und mit einem undertow Server pro deplyoment ist wahrscheinlich auch überflüssig.
Da der Proxy den Host, wie vom Client angefordert, an den Anwendungsserver weiterleiten kann, sollte undertow in der Lage sein, den richtigen virtuellen Host über den Alias-Parameter auszuwählen.
Im Grunde würde der Proxy jede Anfrage an foo.com oder bar.com an localhost: 8080 weiterleiten und die AS die Dinge sortieren lassen.
ich diese nicht getestet haben, aber hier ist, wie es funktionieren kann (auch dies ist für Wildfly 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>
Und der Jboss-web.xml würde den Server-Tag verlieren:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<virtual-host>foo-host</virtual-host>
<context-root>/</context-root>
</jboss-web>
Falls dies funktioniert, würde es überhaupt keinen Aufwand geben.
Edit 2:
getestet einfach die vereinfachten Ansatz - yep, es funktioniert :)
Hinweis: Dies kann auch mit einem 'Filter' und weniger als die Hälfte des Codes durchgeführt werden. – BalusC
@BalusC, heute war ich im Begriff, Ihre Filter-Lösung zu implementieren, war aber erschrocken durch die Tatsache, dass Ihr Beitrag gelöscht wurde)) – Osw
Ich löschte es nur, weil es den Aufwand schließlich nicht wert war. – BalusC