Estoy usando lo siguiente VirtualHost
y mod_proxy para enviar todas las solicitudes de mi subdominio 'api' a mi servicio web Java que se encuentra en webapps/webservice
mi Tomcat.
<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>
Mi problema es que si escribo 'api.midominio.com' me redirigen a 'api.midominio.com/webservice' y aparece un error 404 porque "webservicewebservice" no está disponible.
¿Alguien sabe qué hacer?
Solución: Aunque ya había probado esta solución antes, ¡Stony tenía razón! El problema en mi caso fue que, incluso si no había cambiado nada allí, tuve que reiniciar Tomcat para que funcionara. Reinicié Apache varias veces pero eso no cambió nada.
Respuesta1
No sé si entendí tu problema correctamente, pero si no lo quieres webservice
en tu URL. Luego configura tu Proxy Pass en /
.
<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>
¿O desea ejecutar su servicio web bajo ese dominio? ¿Y no quieres la redirección?
Respuesta2
Después de algunas pruebas y muchos errores, finalmente se me ocurrió la siguiente solución.
Configuré mi host virtual apache así:
<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>
Ahora simplemente envía todas las solicitudes api.mydomain.com
a mi Tomcat en el puerto 8080 sin apuntar a un directorio específico.
Luego agregué esto a /etc/tomcat7/server.xml
:
<Host name="api.mydomain.com" appBase="webapps">
<Context path="" docBase="webservice" />
</Host>
Como ProxyPreserveHost
está activado en mi host virtual Apache, Tomcat obtiene el nombre de host de la solicitud original y puede decidir por sí mismo qué contenido entregar.
El appBase="webapps"
contenido parece entregarse desde el directorio raíz, incluso si está ubicado en otro lugar.