Ich bin in erster Linie ein Java-Entwickler, und ich komme zu Ihnen mit einer Frage, die die Kluft zwischen Entwicklern und Sysadmins überbrückt.
Vor Jahren, als es noch eine Neuheit war, Tomcat als App-Server zu betreiben, war es üblich, ihn mit Apache zu versehen. Soweit ich weiß, wurde dies getan, weil:
- Java galt als "langsam" und es war hilfreich, dass Apache statischen Inhalt direkt bereitstellt.
- Tomcat konnte die Ports 80/443 nur als Root überwachen, was gefährlich war.
Java wird nicht länger als langsam angesehen, und ich bezweifle, dass das Hinzufügen von Apache zum Mix tatsächlich dazu beitragen wird, die Dinge zu beschleunigen.
Was das Port-Problem betrifft, gibt es heutzutage wahrscheinlich einfachere Möglichkeiten, App-Server mit den Ports 80/443 zu verbinden.
Meine Frage ist also: Gibt es in diesen Tagen wirklich Vorteile, wenn Sie Java-Webanwendungen mit Apache konfrontieren? Wenn ja, ist Apache noch der richtige Weg? Soll ich mir Nginx ansehen? Anstelle von Tomcat verwende ich Glassfish, wenn das wichtig ist.
quelle
Dies hängt vom Ökosystem Ihrer App ab. In einer Intranet-Umgebung benötigen Sie wahrscheinlich nichts vor Tomcat.
Wenn allein im Internet als öffentlich zugänglicher Dienst, kommt es darauf an. Apache ist nett zu den Modulen, die es wie mod_security bietet. Wenn Sie sich jedoch nicht mit der Konfiguration von Apache (oder ngix) auskennen, können Sie sich aufgrund von Konfigurationsfehlern noch MEHR Angriffen oder Fehlerquellen aussetzen.
Apache im Vordergrund ist praktisch, um Ausfallseiten bereitzustellen, wenn Sie die Webanwendung aktualisieren und auf einen Neustart warten müssen. Wenn die Neustarts jedoch selten oder zeitlich korrekt sind, ist dies ein weiterer Grund, sich für Tomcat als eigenständigen Computer zu entscheiden.
In den Tomcat-FAQ wird auch darüber gesprochen, wobei einige zusätzliche Punkte angesprochen werden: http://wiki.apache.org/tomcat/FAQ/Connectors#Q3
quelle
Apache ist kein guter Kandidat für die Bereitstellung statischer Inhalte, da es sich um mehrere Prozesse handelt. Nginx ist besser geeignet, da es asynchrone E / A zur Verarbeitung von Anforderungen verwendet. Moderne Tomcats können auch asynchrone E / A (NIO in Java-Terminologie) verwenden. Beispielsweise sollten Sie das
tomcat-native
Paket in Fedora installieren , damit Tomcat asynchrone E / A verwendet.quelle
Erstaunlich, einige dieser Antworten: Betreibt einer von Ihnen tatsächlich hochleistungsfähige Websites mit mehreren Ebenen und mehreren Servern, die von Tomcat unterstützt werden? OP, Ihre ursprüngliche Annahme, dass Tomcat nicht "langsam" ist ... wow. Der Tomcat-Motor ist die Achillesferse der gesamten Ökosphäre.
Ja, Sie möchten Apache im Vordergrund haben - es bietet in erster Linie mod_rewrite (haben Sie UrlRewriteFilter bereits in Ihrem Tomcat implementiert?) Sowie die htaccess-Dateien, die den Schutz eines Webservers so wichtig machen. Mit Apache können Sie Tomcat-Knoten dahinter ausgleichen, Ihren statischen Inhalt viel schneller bereitstellen und eine bessere Leistung von Tomcat erzielen, da Sie die Request-Pipe nicht mit Nicht-Java überladen (js / css / html / jpg / etc.) Dinge. Sie können Ihr SSL problemlos bei Apache auslagern (wenn Sie es nicht bei einem Hardware-LB auslagern) und müssen sich nicht einmal mit der als Java-Keystore bezeichneten Travestie befassen. Es gibt einfach so viele Gewinne - Sie können mod_jk auf Ihre Backend-Knoten abstimmen, um zu verhindern, dass Javas armes kleines Gehirn überrannt wird, da es normalerweise keinen massiven Datenverkehr mit einem durchschnittlichen Java-Codierer bewältigt. '
Hüten Sie sich vor jedem, der Ihnen sagt, dass Apache (oder Nginx usw. - aber Apaches Leistung wird Tomcat sowieso übertreffen, so dass es keine Rolle spielt) keine gute Idee vor Tomcat ist.
quelle
Wenn es bei der Verwendung von Tomcat nur darum geht, Berechtigungen für einen Port ohne Rootberechtigung zu binden, müssen Sie diesen nicht mit Apache httpd versehen. Tomcat wird standardmäßig mit
jsvc
dem Code ausgeliefert, den Sie kompilieren müssen.jsvc
ist ein Java-Service-Wrapper zum Starten von Tomcat als Dienst. Dieser Dienst wird als root gestartet, aber Tomcat wird als normaler Benutzer gestartet. So können Sie Ihren Tomcat an privilegierte Ports binden.Ich weiß nichts über Glassfish, aber stellen Sie sicher, dass es Lösungen gibt, und wenn nicht, können Sie sicher Portweiterleitungstechniken (iptables, etc ...) verwenden.
Ich denke, die Wahl, einen Anwendungsserver mit einem Webserver (beispielsweise Apache httpd) zu versehen, dient dem Lastenausgleich, dem Clustering oder der Bereitstellung statischer Ressourcen nur mit einem Webserver und dynamischer Ressourcen mit einem Anwendungsserver.
quelle