Estou usando o seguinte VirtualHost
e mod_proxy para fazer proxy de todas as solicitações do meu subdomínio 'api' para meu serviço da web Java, localizado em webapps/webservice
meu 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>
Meu problema é que se eu digitar 'api.mydomain.com', sou redirecionado para 'api.mydomain.com/webservice' e recebo um erro 404 porque "webservicewebservice" não está disponível.
Alguém sabe o que fazer?
Solução: Embora eu já tenha tentado essa solução antes, Stony estava certo! O problema no meu caso foi que, mesmo que eu não tivesse mudado nada ali, tive que reiniciar o Tomcat para que funcionasse. Reiniciei o Apache várias vezes, mas isso não mudou nada.
Responder1
Não sei se entendi bem o seu problema, mas se você não quiser webservice
na sua URL. Em seguida, defina seu Proxy Pass como /
.
<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>
Ou você deseja executar seu webservice nesse domínio? E você não quer o redirecionamento?
Responder2
Depois de alguns testes e muitos erros, finalmente encontrei a seguinte solução.
Eu configurei meu host virtual apache assim:
<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>
Agora ele apenas faz proxy de todas as solicitações para api.mydomain.com
meu Tomcat na porta 8080 sem apontar para um diretório específico.
Então adicionei isso a /etc/tomcat7/server.xml
:
<Host name="api.mydomain.com" appBase="webapps">
<Context path="" docBase="webservice" />
</Host>
Como ProxyPreserveHost
está ativado em meu host virtual Apache, o Tomcat obtém o nome do host da solicitação original e é capaz de decidir qual conteúdo entregar.
Com appBase="webapps"
o conteúdo parece ser entregue no diretório raiz, mesmo que esteja localizado em outro lugar.