57 votes

Pourquoi utiliser le serveur Web Apache devant Glassfish ou Tomcat?

Est-ce une bonne idée d’utiliser Apache Webserver devant GF ou Tomcat? Améliore-t-il les performances / la sécurité?

Ou n'y a-t-il aucune raison d'utiliser Apache Web Server avec GF?

68voto

Amir Raminfar Points 17939

Prises de http://wiki.apache.org/tomcat/FAQ/Connectors#Q3

  • Le Clustering. En utilisant HTTP Apache comme un front-end, vous pouvez les laisser Apache HTTP agir comme une porte d'entrée de votre contenu afin de multiples Apache Tomcat instances. Si l'un de vos Apache Matous échoue, HTTP Apache ignore et votre Administrateur de système peut dormir la nuit. Ce point peut être ignorée si vous utilisez un matériel loadbalancer et Apache Tomcat de clustering capacités.
  • L'Agrégation Et La Sécurité. Vous pouvez également utiliser Apache comme une porte d'entrée pour différents Apache Matous pour les différents espaces de noms d'URL (/app1/, /app2/, /app3/ ou des hôtes virtuels). L'Apache Matous peuvent ensuite être chacun dans une zone protégée et à partir d'un point de vue sécurité, vous avez seulement besoin de s'inquiéter à propos du serveur HTTP Apache. Essentiellement, Apache devient une smart proxy server.
  • De sécurité. Cette rubrique peuvent influencer l'une ou l'autre manière. Java est le gestionnaire de sécurité si Apache a une plus grande notoriété et astuces en matière de sécurité. Je n'entrerai pas dans plus de détails, mais de laisser Google sera votre ami. En fonction de votre scénario, on pourrait être mieux que les autres. Mais aussi garder à l'esprit, si vous exécutez Apache, Tomcat - vous avez deux systèmes de défendre, pas un seul.
  • Les Add-ons. L'ajout sur CGI, perl, PHP est très naturel de Apache. Ses plus lent et plus d'une bidouille pour Tomcat. HTTP Apache a également des centaines de modules qui peuvent être branchés à volonté. Apache Tomcat peut avoir cette capacité, mais le code n'a pas encore été écrit.
  • Les décorateurs! Avec Apache HTTP Apache Tomcat, vous pouvez effectuer un certain nombre des décorateurs d'Apache Tomcat ne prend pas en charge ou n'est pas immédiate par le code. Par exemple, mod_headers, mod_rewrite, et mod_alias pourrait être écrit pour Apache Tomcat, mais pourquoi réinventer la roue quand HTTP Apache a fait si bien?
  • Vitesse. HTTP Apache est plus rapide à servir du contenu statique que Apache Tomcat. Mais, à moins d'avoir le trafic du site, ce point est inutile. Mais dans certains scénarios, Apache Tomcat peut être plus rapide qu'Apache httpd. Afin de tester les performances de VOTRE site. Apache Tomcat peut effectuer à httpd vitesses lorsque vous utilisez le connecteur approprié (TAEG avec sendFile activé). La vitesse ne doit pas être considérée comme un facteur lors du choix entre Apache httpd et Tomcat
  • Prise de manipulation ou de la stabilité du système. HTTP Apache a une meilleure prise de manipulation à l'égard des conditions d'erreur que Apache Tomcat. La raison principale est Apache Tomcat devez effectuer toutes son support manipulation via la JVM qui doit être multi-plateforme. Le problème est prise d'optimisation est une plate-forme spécifique épreuve. La plupart du temps le code java est bien, mais quand vous êtes aussi bombardé avec des connexions perdues, paquets non valides, non valides les demandes de invalid IP, HTTP Apache fait un meilleur travail à laisser tomber ces conditions d'erreur que la JVM basé sur le programme. (YMMV)

47voto

Adam Gent Points 15055

Puisque tout le monde vous a donné des raisons de mettre Apache en front de Tomcat permettez-moi de vous donner quelques raisons pour lesquelles pas à:

  • Le connecteur AJP n'est pas et ne sera pas prise en charge avancée des IO sens pas de Comète, Websockets, etc.
  • Si vous n'utilisez pas AJP j'ai remarqué qu'il y avait un assez grand nombre de procurations de surcharge lors de l'utilisation de mod_proxy d'Apache. Donc, si vous êtes à la recherche pour une faible latence Apache en face, ne serait pas bon.
  • Apache a une assez grosse impression de pied par rapport à Nginx ou Lighttpd etc.

Mettre Apache en front de ne PAS:

Ce que Apache ne vous donnent est plus de plugins et vous permet d'exécuter différentes technologies du web.

Si vous avez seulement besoin de Tomcat, vous feriez mieux adapté à l'utilisation d'un HAProxy ou Nginx comme un équilibreur de charge.

8voto

dbyrne Points 18604
  • Évolutivité - Comme Amir et user384706 souligné, vous pouvez équilibrer la charge de plusieurs instances de votre application Apache. Cela vous permettra de gérer plus de volume, et l'augmentation de la stabilité dans le cas où l'un de vos instances descend.

  • Sécurité - Apache, Tomcat et Glassfish tous support SSL, mais si vous décidez d'utiliser Apache, le plus probable c'est là que vous devez le configurer. Si vous souhaitez une protection supplémentaire contre les attaques de DoS, XSS, injection SQL, etc.) vous pouvez installer le mod_security (web application firewall).

  • Fonctionnalités supplémentaires - Apache a un tas de nice modules disponibles pour la réécriture d'URL, interfaçage avec d'autres langages de programmation, l'authentification, et une tonne d'autres choses.

  • Performance - Si vous avez beaucoup de contenu statique, la servir avec Apache permettra d'améliorer vos performances. Si la plupart de votre contenu est dynamique, en utilisant Tomcat ou Glassfish seul sera tout aussi rapide (probablement plus). (comme l'a souligné par les réponses à cette question, ce n'est pas plus vrai.)

1voto

Cratylus Points 21838

L'une des raisons à la place d'Apache en front de Tomcat serait pour l'équilibrage de charge.
Les demandes de frapper le serveur Apache en frontal, et sont distribués aux backend Tomcat conteneurs en fonction de la charge et de la disponibilité.
Les clients ne connais qu'une seule adresse IP (Apache), mais les demandes sont répartis sur plusieurs conteneurs.
Donc, c'est dans le cas du déploiement d'un type d'application web et vous avez besoin robuste.
Si votre question est à propos d'une application web simple puis voir dbyrne répondre

0voto

stixn Points 1

Si vous utilisez une pile LAMP, vous pouvez exécuter PHP / Ruby depuis Apache et transmettre du contenu Java à Tomcat avec mod_jk.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X