Pourquoi Utiliser Apache Web Server devant Glassfish ou Tomcat?

est-ce une bonne idée D'utiliser Apache Webserver devant GF ou Tomcat? Elle améliore la performance/sécurité?

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

52
demandé sur Ken Liu 2011-02-25 23:38:13

5 réponses

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

  • Clustering. En utilisant Apache HTTP comme front end, vous pouvez laisser Apache HTTP agir comme une porte d'entrée de votre contenu vers plusieurs instances Apache Tomcat. Si L'un de vos Tomcats Apache échoue, Le HTTP Apache L'ignore et votre administrateur système peut dormir toute la nuit. Ce point pourrait être ignoré si vous utilisez un loadbalancer matériel et les capacités de clustering D'Apache Tomcat.
  • Clustering / Security. Vous pouvez également utiliser Apache comme porte d'entrée pour différents Tomcats Apache pour différents espaces de noms D'URL (/app1/, /app2/, /app3/, ou Hôtes virtuels). Les Tomcats Apache peuvent alors être chacun dans une zone protégée et du point de vue de la sécurité, vous n'avez qu'à vous soucier du serveur HTTP Apache. Essentiellement, Apache devient un serveur proxy intelligent.
  • sécurité. Ce sujet peut influencer l'un ou l'autre. Java a le gestionnaire de sécurité tandis Qu'Apache a une plus grande notoriété et astuces en matière de sécurité. Je n'entrerai pas dans les détails, mais laissez Google être votre ami. Selon votre scénario, l'un pourrait être meilleur que l'autre. Mais gardez aussi à l'esprit que si vous utilisez Apache avec Tomcat - vous avez deux systèmes à défendre, pas un seul.
  • Add-ons. Ajouter sur CGI, perl, PHP est très naturel pour Apache. Son plus lent et plus d'un kludge pour Tomcat. Apache HTTP possède également des centaines de modules qui peuvent être connectés à volonté. Apache Tomcat peut avoir cette capacité, mais le code n'a pas encore été écrit.
  • décorateurs! Avec Apache HTTP devant Apache Tomcat, vous pouvez effectuer n'importe quel nombre de décorateurs Qu'Apache Tomcat ne supporte pas ou n'a pas le support de code immédiat. Par exemple, mod_headers, mod_rewrite et mod_alias pourraient être écrits pour Apache Tomcat, mais pourquoi réinventer la roue alors Qu'Apache HTTP L'a si bien fait?
  • de la Vitesse. Le HTTP Apache est plus rapide à utiliser contenu statique Qu'Apache Tomcat. Mais à moins d'avoir un site très fréquenté, ce point est inutile. Mais dans certains scénarios, Apache Tomcat peut être plus rapide que Apache httpd. Afin de tester les performances de VOTRE site. Apache Tomcat peut fonctionner à des vitesses httpd en utilisant le bon connecteur (APR avec sendfile activé). La vitesse ne doit pas être considérée comme un facteur dans le choix entre Apache httpd et Tomcat
  • Prise de manipulation ou de la stabilité du système. Le protocole HTTP Apache a une meilleure gestion des sockets en ce qui concerne: conditions d'erreur Qu'Apache Tomcat. La raison principale est Qu'Apache Tomcat doit effectuer toutes ses manipulations de socket via la plateforme JVM qui doit être croisée. Le problème est que l'optimisation des sockets est une épreuve spécifique à la plate-forme. La plupart du temps, le code java est correct, mais lorsque vous êtes aussi bombardé de connexions interrompues, de paquets invalides, de requêtes invalides provenant d'IP invalides, Apache HTTP fait un meilleur travail pour supprimer ces conditions d'erreur que le programme basé sur JVM. (YMMMV)
64
répondu Amir Raminfar 2014-03-05 11:20:15

puisque tout le monde vous a donné des raisons pourquoi mettre Apache devant Tomcat laissez-moi vous donner quelques raisons pourquoi pas à:

  • le connecteur AJP ne supporte pas et ne supportera pas le io avancé qui signifie non Comet , Websockets , etc.
  • si vous n'utilisez pas AJP j'ai remarqué qu'il y a un assez grand "proxy overhead" lorsque vous utilisez mod_proxy pour Apache. Donc si vous cherchez Apache à faible latence devant, ça ne serait pas bon.
  • Apache a une assez grande empreinte de pied par rapport à Nginx ou Lighttpd etc.

Mettre Apache en front de ne PAS :

ce que vous donne Apache est plus de plugins et vous permet d'exécuter différentes technologies web.

si vous avez seulement besoin de Tomcat, vous seriez mieux adapté pour utiliser un HAProxy ou Nginx comme équilibreur de charge.

44
répondu Adam Gent 2014-07-09 21:02:56
  • Scalability - comme Amir et user384706 l'ont fait remarquer, vous pouvez charger plusieurs instances de votre application derrière Apache. Cela vous permettra de gérer plus de volume, et d'augmenter la stabilité dans le cas où l'une de vos instances descend.

  • "Security - Apache, Tomcat, et Glassfish tous supporter SSL, mais si vous décidez d'utiliser Apache, très probablement thats où vous devez le configurer. Si vous souhaitez une protection supplémentaire contre les attaques (DoS, XSS, SQL injection, etc.) vous pouvez installer le pare-feu mod_security web application.

  • " Additional Features - Apache a un tas de bons modules disponibles pour la réécriture D'URL, interfaçage avec d'autres langages de programmation, authentification, et une tonne d'autres choses.

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

8
répondu dbyrne 2017-05-23 11:33:25

une raison pour placer Apache devant Tomcat serait pour l'équilibrage de charge.

Les requêtes frappent le serveur Apache à l'avant et sont distribuées pour sauvegarder Tomcat containers en fonction de la charge et de la disponibilité.

Les clients ne connaissent Qu'une seule adresse IP (Apache), mais les requêtes sont réparties sur plusieurs conteneurs.

Donc, c'est dans le cas du déploiement d'un type d'application web et vous besoin robuste.

Si votre question concerne une application web simple, alors voir la réponse de dbyrne

1
répondu Cratylus 2011-02-25 20:50:23

si vous utilisez une pile de lampes, vous pouvez exécuter PHP/Ruby stuff à partir d'apache et transmettre des fichiers java à tomcat avec mod_jk.

0
répondu stixn 2011-02-25 20:49:23