Serwer Apache HTTP jest dość duży projekt, znacznie większy niż, powiedzmy, lighthttp
lub nginx
czy na pewno „simple serwery HTTP” Widzicie pływających wokół w C / C ++ tutoriale.
Do czego służy dodatkowy kod? Czy dodaje bezpieczeństwo / stabilność (a jeśli tak, to w jaki sposób?) Czy może po prostu robi takie rzeczy jak parsowanie conf
plików Apache / .htaccess
wpisywanie rzeczy (i, jak sądzę, VirtualHosts
itp.).
Proszę nie krytykować Apache, ale ponieważ jestem zainteresowany pisaniem pewnego rodzaju serwera WWW i chciałbym wiedzieć rzeczy, które, choć być może nieoczywiste, są ważne, aby pamiętać o bezpiecznym, stabilnym i szybkim serwerze internetowym.
Odpowiedzi:
Jest o wiele bardziej złożony, ponieważ:
Ale również:
To powiedziawszy, odpowiedź R. zawiera ważne punkty na temat jego architektury i dlaczego niektóre inne serwery sieciowe również korzystają z względnej sławy. To zależy od tego, czego chcesz.
Możesz także zajrzeć na /programming/475386/apache-vs-nginx-vs-lighttpd-which-is-simpler-to-configure-and-administer po więcej materiałów. Cały wątek, choć nie odpowiada bezpośrednio na twoje pytanie, wskazuje na wiele różnic.
Jeśli chcesz napisać serwer WWW od zera, powiedziałbym, że studiowanie Apache httpd jest dobrą rzeczą, zwłaszcza jeśli możesz spojrzeć wstecz na to, jak ewoluował on z czasem. Pokazuje także, czego należy unikać (zarówno w punktach, do których dobrze się odnosił, jak i w miejscach, w których inni osiągają lepsze wyniki). Jednak kod może być nieco skomplikowany na początek i możesz w tym celu spojrzeć na mniejsze, bardziej lekkie serwery. Ale przestudiuj ogólną architekturę i porównaj ją z innymi.
źródło
Moim osobistym zdaniem dzieje się tak ze względu na wszystkie funkcje, które posiada. Możesz robić rzeczy z Apache, których nie możesz teraz robić bez nginx i lighthttpd. Apache jest tak naprawdę platformą dostarczaną ze wsparciem HTTP. Możesz mieć zaimplementowany dowolny protokół, taki jak FTP lub SMTP (patrz na przykład mod_echo). Obsługuje filtry, które pozwalają np .: obsługiwać kod PHP poza bazą danych zamiast plików (ponieważ mod_php jest modułem filtru, a nie producentem treści). Może to wydawać się niezbyt użytecznym pomysłem, ale ogólnie można użyć filtrów, aby zmienić dowolną zawartość wchodzącą lub wychodzącą bez potrzeby modyfikowania oryginalnego producenta treści. Ma poprawki dla klientów HTTP, których już nie ma, ale wtedy Apache był jedynym sposobem, aby obsługiwać ich w spójny i wolny od błędów sposób. Wiele z nich nie jest obecnie używanych.
Dodatkowy kod służy również do bezpieczeństwa, ponieważ mod_log_forensics wraz z CoreDumpDirectory stanowią prawdziwe narzędzie, gdy czujesz, że ktoś wykorzystuje lukę w zabezpieczeniach. Nie słyszałem o czymś takim w przypadku innych serwerów internetowych. Jeśli chodzi o stabilność, pochodzi ona z dobrze skonstruowanego rdzenia, a nie dodatkowego kodu. Na liście dyskusyjnej deweloperów Apache są ludzie, którzy nazywani są „podstawowymi stabilizatorami”. Są bardzo wybredni w kwestii wszelkich zmian w rdzeniu i mają tendencję do wypychania ich do modułów, co w rzeczywistości czyni Apache dość stabilnym. Jeśli zawiedzie, przez większość czasu jest to awaria modułu, a nie błąd w rdzeniu serwera.
źródło
Używam Apache od ponad dwunastu lat zarówno jako administrator, jak i programista dla dużych aplikacji internetowych Perl, Python i Ruby. Apache jest solidnym serwerem WWW, który ma czystą / modułową konstrukcję i silnie zgięty UNIX. Jedną z najpotężniejszych funkcji jest czysta modułowość i dobra dokumentacja. Jest to bardzo łatwy w zarządzaniu serwer WWW. Jest dojrzały i udowodniony, co wyraźnie widać po 15 latach dominującego udziału w rynku .
Chociaż dokumentacja użytkownika jest bardzo dobra, niestety jest bardzo cenna niewielka dokumentacja dla programistów / autorów modułów i myślę, że to trochę boli, ponieważ nie przyciąga tak wielu programistów, jak to możliwe. Ale to w żaden sposób nie oznacza, że jest źle zaprojektowany - po prostu źle udokumentowany pod tym względem. Jest książka Nicka Kew, która wydaje się być ostatecznym źródłem dla twórców modułów. Byłoby jednak miło, gdyby sam projekt miał lepszą dokumentację dotyczącą wszystkich aspektów pisania modułów.
Co do tego, że jest przerobiony - pranie świń. Ma doskonały design. Tak, tu i tam są brodawki, ale dotyczy to całego oprogramowania. Wykorzystanie pul pamięci jest fantastyczne, możliwość podłączenia różnych modułów wewnętrznych mówi o tym, jak czysty i modułowy jest, ma świetny C-API, a APR znacznie ułatwia wiele rzeczy nie tylko dla projektu Apache dla programiści w innych projektach. Jeśli zależy ci w ogóle na przenośności, docenisz APR. Może nie jest idealny, ale wciąż jest solidny, dobrze zaprojektowany i bardzo wygodny.
Z punktu widzenia czystych funkcji, elastyczności, administracji, wsparcia platformy, skalowalności, dokumentacji i dojrzałości, Apache jest fantastycznym serwerem WWW.
źródło
Jest przeprojektowany / przeprojektowany. Co najgorsze, korzysta z APR (Apache Portable Runtime), nadętej warstwy, która w końcu wydaje wiele poziomów wywołań funkcji i dynamicznej alokacji pamięci i zwalnia, aby osiągnąć równowartość pojedynczego
printf
wywołania. Wszystko to prowadzi do:źródło
mod_perl
niż thttpd po prostu uruchamiał nową instancję perla dla każdego klienta. To było dawno temu i nigdy nie przeprowadzałem rygorystycznych testów w celu wyśledzenia wszystkich przyczyn; dział właśnie kupił nowy serwer ...