Ich verwende Folgendes und mod_proxy, um alle Anfragen für meine „API“-Subdomäne an meinen Java-Webdienst weiterzuleiten, der sich auf meinem Tomcat VirtualHost
befindet .webapps/webservice
<VirtualHost *:80>
ServerName api.mydoamin.com
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /webservice http://localhost:8080
ProxPassReverse / http://localhost:8080
</VirtualHost>
Mein Problem besteht darin, dass ich, wenn ich „api.mydomain.com“ eingebe, zu „api.mydomain.com/webservice“ weitergeleitet werde und eine 404-Fehlermeldung erhalte, weil „webservicewebservice“ nicht verfügbar ist.
Weiß jemand, was zu tun ist?
Lösung: Obwohl ich diese Lösung schon einmal ausprobiert hatte, hatte Stony recht! Das Problem in meinem Fall war, dass ich Tomcat neu starten musste, damit es funktionierte, auch wenn ich dort nichts geändert hatte. Ich habe Apache mehrmals neu gestartet, aber das hat nichts geändert.
Antwort1
Ich weiß nicht, ob ich Ihr Problem richtig verstehe, aber wenn Sie das nicht webservice
in Ihrer URL möchten, setzen Sie Ihren Proxy-Pass auf /
.
<VirtualHost *::80>
ServerName api.mydoamin.com
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/webservice/
ProxPassReverse / http://localhost:8080/webservice/
</VirtualHost>
Oder möchtest Du Deinen Webservice unter dieser Domain betreiben? Und Du möchtest keine Weiterleitung?
Antwort2
Nach einigen Tests und vielen, vielen Fehlern bin ich schließlich auf die folgende Lösung gekommen.
Ich habe meinen virtuellen Apache-Host wie folgt eingerichtet:
<VirtualHost *:80>
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny, allow
Allow from all
</Proxy>
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
ServerName api.mydomain.com
</VirtualHost>
Jetzt leitet es einfach alle Anfragen an api.mydomain.com
meinen Tomcat auf Port 8080 weiter, ohne auf ein bestimmtes Verzeichnis zu verweisen.
Dann habe ich Folgendes hinzugefügt /etc/tomcat7/server.xml
:
<Host name="api.mydomain.com" appBase="webapps">
<Context path="" docBase="webservice" />
</Host>
Wie ProxyPreserveHost
in meinem virtuellen Apache-Host aktiviert, erhält Tomcat den Hostnamen der ursprünglichen Anfrage und kann selbst entscheiden, welcher Inhalt ausgeliefert werden soll.
Dabei appBase="webapps"
wird der Inhalt scheinbar aus dem Stammverzeichnis ausgeliefert, auch wenn dieser woanders liegt.