Da minha própria experiência, é sensato manter algo na frente do Tomcat para protegê-lo um pouco do mundo exterior. Se você executar o tomcat com a extensão nativa do Tomcat, o IO será muito rápido e o Tomcat se comportará muito bem.
O Tomcat também pode ser executado na porta 80 sem executar o root, usando o jsvc, que, se não for fornecido com sua distro, é muito simples de criar e usar.
No entanto, manter um simples front-end na web também é útil: porque este frontend pode dar a você o pequeno toque de flexibilidade que você nunca terá com o Tomcat (gzip on the fly, reescrever regras, manipular mais de um tomcat no mesmo IP: Porta usando virtualhost simples e mapeamento de proxy, ...)
O Apache2 pode ser esse frontend usando mod_proxy + AJP . A AJP lida com cabeçalhos e encaminhamento de IP de origem para o Tomcat e você nunca será muito mais feliz quando precisar adicionar RewriteRules em seu domínio, pois o Apache fornece isso de uma maneira muito simples.
No entanto, o AJP é muito lento para escolher a mudança de status do webapp e ter que esperar 30 segundos quando o seu webapp reinicia para vê-lo disponível novamente na internet é MUITO frustrante. Existem também alguns problemas não tão bons na mais recente combinação de AJP + Tomcat que leva a páginas vazias e a um tipo de conteúdo quebrado (pode ser corrigido, mas desistindo dos aprimoramentos nativos do tomcat ...).
O HTTP Mod_proxy simples também pode ser usado, mas por não ser um proxy real (o Apache altera o cabeçalho Host: o IP de origem se torna o endereço de proxy, ...) é algo que eu não faço realmente gosto.
Outras boas alternativas incluem:
-
HAProxy : Proxy muito inteligente e simples, muito bom em lidar com carga, muito simples de configurar, robusto e um proxy HTTP real, pode encaminhar o IP de origem através do usual X- Encaminhado para o cabeçalho. Eu uso isso na produção e estou muito feliz com isso. Ele pode escalonar até milhares de conexões ao vivo, enquanto restringe o número de conexões ativas ao seu back-end e possui muitos recursos interessantes integrados. No entanto, provavelmente não é adequado fazer algo muito mais inteligente do que o roteamento HTTP (como RewriteRules, por exemplo).
-
Nginx : Eu ouvi que este servidor realmente suporta o AJP. Sendo mais leve que o Apache e com mais recursos que o HAProxy, provavelmente tentarei isso hoje se eu tivesse a oportunidade.
Conclusão
- Se você tiver algum tempo para testar, tente o Nginx,
- Se você preferir ter um frontend simples e sólido, vá para o HAProxy,
- Se você preferir a rota "tradicional", vá para Apache2 + AJP,
- Se você acha que o Tomcat será strong o suficiente e fornecerá todos os recursos necessários, use o jsvc e coloque o Tomcat na porta 80