Sou principalmente um desenvolvedor Java e venho até você com uma pergunta que abrange a divisão entre desenvolvedores e administradores de sistemas.
Anos atrás, quando era uma coisa nova executar o Tomcat como um servidor de aplicativos, era costume enfrentá-lo com o Apache. Pelo que entendi, isso foi feito porque:
- Java era considerado "lento" e era útil fazer com que o Apache servisse conteúdo estático diretamente.
- O Tomcat não podia ouvir as portas 80/443 a menos que executasse como root, o que era perigoso.
O Java não é mais considerado lento, e duvido que adicionar o Apache à mistura realmente ajude a acelerar as coisas.
Quanto à questão das portas, provavelmente existem maneiras mais simples de conectar servidores de aplicativos às portas 80/443 atualmente.
Então, minha pergunta é: existe realmente algum benefício em fazer frente aos Java Webapps com Apache atualmente? Se sim, o Apache ainda é o caminho a percorrer? Devo olhar para o Nginx? Em vez do Tomcat, estou usando o Glassfish, se isso importa.
fonte
Depende do ecossistema em torno do seu aplicativo. Em um ambiente de intranet - você provavelmente não precisa de nada na frente do Tomcat.
Se estiver sozinho na internet como um serviço público, depende. O Apache é interessante devido aos módulos que ele fornece, como mod_security. Mas se você não tiver conhecimento da configuração do apache (ou ngix) - poderá se expor a MAIS ataques ou pontos de falha devido a erros de configuração.
O Apache na frente é útil para servir páginas indisponíveis nos casos em que você precisa atualizar o aplicativo da Web e aguardar uma reinicialização. Mas se as reinicializações forem raras ou tiverem cronometrado corretamente - é outro motivo para tornar o Tomcat independente.
As perguntas frequentes do Tomcat também falam sobre isso, abordando alguns pontos adicionais: http://wiki.apache.org/tomcat/FAQ/Connectors#Q3
fonte
O Apache não é um bom candidato para veicular conteúdo estático devido à sua natureza de múltiplos processos. O Nginx se adapta melhor, pois usa E / S assíncrona para processar solicitações. Os Tomcats modernos também podem usar E / S assíncrona (NIO na terminologia Java). Por exemplo, você deve instalar o
tomcat-native
pacote no Fedora para fazer com que o Tomcat use E / S assíncrona.fonte
Surpreendente, algumas dessas respostas - algum de vocês, na verdade, administra sites de alto desempenho com vários níveis e com suporte a vários servidores Tomcat? OP, sua suposição original de que o Tomcat não é "lento" ... uau. O motor Tomcat é o calcanhar de Aquiles de toda a ecosfera.
Sim, você quer o Apache na frente - ele fornece primeiro e acima de tudo o mod_rewrite (você já implementou o UrlRewriteFilter no seu Tomcat?), Bem como os arquivos htaccess que tornam tão importante a proteção de um servidor da web. O Apache pode permitir que você carregue o equilíbrio dos nós do Tomcat por trás dele, atenda seu conteúdo estático muito mais rapidamente e obtenha melhor desempenho do Tomcat porque você não está sobrecarregando seu canal de solicitação com não-Java (js / css / html / jpg / etc.) coisas. Você pode descarregar seu SSL no Apache (se não estiver descarregando em um LB de hardware) com facilidade e nem precisar lidar com esse travesti chamado Java Keystore. Existem tantas vitórias - você pode ajustar o mod_jk aos nós de back-end para evitar a sobrecarga do pobre cérebro do Java, porque normalmente não pode lidar com tráfego maciço com o codificador Java comum '
Cuidado com quem lhe disser que o Apache (ou nginx, etc - mas o desempenho do Apache ofuscará o Tomcat de qualquer maneira, portanto não importa) não é uma boa ideia na frente do Tomcat.
fonte
Se for apenas uma questão de vincular privilégios à porta sem ser root ao usar o Tomcat, você não precisará enfrentá-lo com o Apache httpd. Por padrão, o Tomcat é enviado com o
jsvc
qual você precisa compilar.jsvc
é um wrapper de serviço java para iniciar o Tomcat como um serviço. Este serviço inicia como root, mas inicia o Tomcat como um usuário normal. Portanto, você pode vincular seu Tomcat a portas privilegiadas.Não conheço o Glassfish, mas tenha certeza de que existem soluções; caso contrário, você certamente pode usar técnicas de encaminhamento de porta (iptables, etc ...)
Eu acho que a escolha de fazer frente a um servidor de aplicativos com um servidor Web (Apache httpd, por exemplo) é para balanceamento de carga, armazenamento em cluster ou servir recursos estáticos apenas com um servidor Web e recursos dinâmicos com um servidor de aplicativos.
fonte