Eu sei que minha resposta está meio que sobreposta com algumas das outras respostas, mas esta é uma solução completa que tem algumas vantagens. Isso funciona no Tomcat 8:
- O aplicativo principal é servido a partir da raiz
- A implantação de arquivos war através da interface da web é mantida.
- O aplicativo principal será executado na porta 80 enquanto apenas os administradores tiverem acesso às pastas de gerenciamento (eu percebo que os sistemas * nix exigem um superusuário para vincular ao 80, mas no Windows isso não é um problema).
Isso significa que você só precisa reiniciar o tomcat uma vez e, após a atualização dos arquivos war, pode ser implantado sem problemas.
Etapa 1: no arquivo server.xml, localize a entrada do conector e substitua-a por:
<Connector
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector
port="80"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
Etapa 2: defina contextos na <Host ...>
tag:
<Context path="/" docBase="CAS">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/ROOT" docBase="ROOT">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/manager" docBase="manager" privileged="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/host-manager" docBase="host-manager" privileged="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
Observe que eu enderecei todos os aplicativos na pasta webapp. O primeiro efetivamente muda a raiz e o aplicativo principal da posição. Agora, o ROOT está ativado http://example.com/ROOT
e o aplicativo principal está ativado http://example.com/
. Os aplicativos da web protegidos por senha requerem o privileged="true"
atributo
Quando você implanta um arquivo CAS.war que corresponda à raiz ( <Context path="/" docBase="CAS">
é necessário recarregá-lo no painel de administração, pois ele não é atualizado com a implantação).
Não inclua o <Context path="/CAS" docBase="CAS">
em seus contextos, pois isso desativa a opção de gerente para implantar arquivos de guerra. Isso significa que você pode acessar o aplicativo de duas maneiras: http://example.com/
ehttp://example.com/APP/
Etapa 3: para impedir o acesso indesejado à pasta raiz e do gerenciador, adicione um valve
a essas tags de contexto como esta:
<Context path="/manager" docBase="manager" privileged="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
addConnectorPort="true"
allow="143\.21\.2\.\d+;8080|127\.0\.0\.1;8080|::1;8080|0:0:0:0:0:0:0:1;8080"/>
</Context>
Isso basicamente limita o acesso à pasta de aplicativos da web de administração a pessoas do meu próprio domínio (endereço IP falso) e host local quando eles usam a porta 8080 padrão e mantém a capacidade de implantar dinamicamente os arquivos de guerra por meio da interface da web.
Se você quiser usar isso para vários aplicativos que usam endereços IP diferentes, adicione o endereço IP ao conector ( address="143.21.2.1"
).
Se você deseja executar vários aplicativos da Web a partir da raiz, pode duplicar a etiqueta de Serviço (use um nome diferente para o segundo) e alterar a base de dados de <Context path="/" docBase="CAS">
para, por exemplo <Context path="/" docBase="ICR">
.