Der Apache HTTP Server ist ein ziemlich großes Projekt-viel größer ist als, sagen wir, lighthttp
oder nginx
oder sicher die „einfachen HTTP - Server“ Sie schwimmen sehen in C / C ++ Tutorials um.
Wofür ist der zusätzliche Code? Fügt es Sicherheit / Stabilität hinzu (und wenn ja, wie?) Oder dient es nur dazu, Apache- conf
Dateien zu analysieren / .htaccess
Dinge zu tippen (und, denke ich, VirtualHosts
usw.).
Ich bitte Apache nicht zu kritisieren, aber weil ich daran interessiert bin, eine Art Webserver zu schreiben, und ich möchte Dinge wissen, die für einen sicheren, stabilen und schnellen Webserver wichtig sind, auch wenn sie vielleicht nicht offensichtlich sind.
Antworten:
Es ist viel komplexer, weil:
Aber auch:
Davon abgesehen enthält Rs Antwort gültige Punkte zu seiner Architektur und warum einige andere Webserver ebenfalls von relativem Ruhm profitieren. Es kommt darauf an, was Sie wollen.
Sie können auch unter /programming/475386/apache-vs-nginx-vs-lighttpd- nachsehen, um weitere Informationen zu konfigurieren und zu verwalten. Obwohl Sie Ihre Frage nicht direkt beantworten, zeigt der gesamte Thread viele Unterschiede auf.
Wenn Sie daran interessiert sind, einen Webserver von Grund auf neu zu schreiben, ist es eine gute Sache, Apache httpd zu studieren, insbesondere, wenn Sie sich die Entwicklung im Laufe der Zeit ansehen können. Es zeigt Ihnen auch, was Sie vermeiden müssen (sowohl in Bezug auf Punkte, die gut angesprochen wurden, als auch an Stellen, an denen es von anderen übertroffen wird). Allerdings ist der Code anfangs möglicherweise etwas komplex, und Sie bevorzugen möglicherweise kleinere, leichtere Server. Aber studieren Sie die Gesamtarchitektur und vergleichen Sie sie mit anderen.
quelle
Meiner persönlichen Meinung nach ist das alles wegen aller Funktionen, die es hat. Sie können Dinge mit Apache tun, die Sie momentan weder mit nginx noch mit lighthttpd tun könnten. Apache ist eigentlich eine Plattform, die mit HTTP-Unterstützung ausgeliefert wird. Sie können so gut wie jedes Protokoll wie FTP oder SMTP implementieren (siehe mod_echo zum Beispiel). Es werden Filter unterstützt, mit denen Sie beispielsweise PHP-Code außerhalb der Datenbank anstelle von Dateien bereitstellen können (da mod_php ein Filtermodul und kein Content-Produzent ist). Dies scheint vielleicht keine sehr nützliche Idee zu sein, aber im Allgemeinen können Sie Filter verwenden, um Inhalte zu ändern, die ein- oder ausgehen, ohne den ursprünglichen Inhaltserzeuger anpassen zu müssen. Es gibt Verbesserungen für HTTP-Clients, die es nicht mehr gibt, aber damals war Apache die einzige Möglichkeit, sie konsistent und fehlerfrei zu bedienen. Ein Großteil davon wird heutzutage nicht mehr verwendet.
Der zusätzliche Code wird auch für die Sicherheit verwendet, da mod_log_forensics zusammen mit CoreDumpDirectory ein echtes Tool darstellt, wenn Sie glauben, dass jemand eine Sicherheitslücke ausnutzt. Habe bei anderen Webservern noch nichts davon gehört. Was die Stabilität angeht, kommt es aus einem gut strukturierten Kern, nicht aus einem zusätzlichen Code. Es gibt Leute auf der Apache-Dev-Mailingliste, die "Core Stabilizers" genannt werden. Sie sind sehr wählerisch in Bezug auf Änderungen im Kern und tendieren dazu, sie zu Modulen zu verschieben, was Apache tatsächlich ziemlich stabil macht. Wenn dies fehlschlägt, liegt meistens ein Modulfehler und nicht der Fehler im Serverkern vor.
quelle
Ich habe Apache über zwölf Jahre lang sowohl als Administrator als auch als Entwickler für große Perl-, Python- und Ruby-Webanwendungen verwendet. Apache ist ein solider Webserver, der ein klares / modulares Design und einen starken UNIX-Hang aufweist. Eines der leistungsstärksten Merkmale ist die Modularität und gute Dokumentation. Es ist ein sehr überschaubarer Webserver. Es ist ausgereift und bewährt, wie 15 Jahre vorherrschender Marktanteil zeigen .
Obwohl die Benutzerdokumentation sehr gut ist, gibt es leider wenig Dokumentation für Entwickler / Modulschreiber, und ich denke, dies kann ein wenig schaden, da es nicht so viele Entwickler anzieht, wie es könnte. Das heißt aber keineswegs, dass es schlecht designt ist - nur schlecht dokumentiert in dieser Hinsicht. Es gibt ein Buch von Nick Kew, das die endgültige Quelle für Modulautoren zu sein scheint. Aber es wäre schön, wenn das Projekt selbst eine bessere Dokumentation zu allen Aspekten des Modulschreibens hätte.
Was es angeht, überarbeitet zu sein - Quatsch. Es hat ein ausgezeichnetes Design. Ja, hier und da gibt es einige Warzen, aber das gilt für alle Software. Die Verwendung von Speicherpools ist fantastisch. Die Fähigkeit, verschiedene Back-Ends anzuschließen, spricht dafür, wie sauber und modular sie ist. Sie verfügt über eine großartige C-API und der APR vereinfacht vieles, nicht nur für das Apache-Projekt Entwickler in anderen Projekten. Wenn Ihnen die Portabilität am Herzen liegt, werden Sie den APR zu schätzen wissen. Es ist zwar nicht perfekt, aber dennoch solide, gut gestaltet und sehr praktisch.
Im Hinblick auf Funktionen, Flexibilität, Administration, Plattformunterstützung, Skalierbarkeit, Dokumentation und Reifegrad ist Apache ein fantastischer Webserver.
quelle
Es ist überentwickelt. Das Schlimmste ist, dass es APR (Apache Portable Runtime) verwendet, eine aufgeblähte Schicht, die viele Ebenen von Funktionsaufrufen und dynamischer Speicherzuweisung und -freigabe benötigt, um das Äquivalent eines einzelnen
printf
Aufrufs zu erreichen. Dies alles führt dazu, dass:quelle
mod_perl
als wenn thttpd nur eine neue Perl-Instanz für jeden Client ausführte. Das ist lange her und ich habe nie strenge Tests durchgeführt, um alle Ursachen aufzuspüren. Die Abteilung hat gerade einen neuen Server gekauft ...