Nginx vs Apache: porównanie bezpośrednie i jak wybrać

Zaktualizowano: 2022 / Autor artykułu: Timothy Shim

Obie nginx i Apache to dojrzałe produkty z bogatymi zestawami funkcji i wysoką wydajnością. Mają wspólne źródła typu open source i można je wdrożyć na serwerach z systemem Windows lub Linux. 

Jednak niektóre kluczowe różnice mogą sprawić, że wybierzesz jedną z nich.

Na przykład Apache to kompleksowe rozwiązanie, które od razu obsługuje wiele różnych technologii i modułów. W przeciwieństwie do tego, Nginx polega na modułach innych firm, aby rozszerzyć swoją funkcjonalność.

Aby zobaczyć, które serwer wWW może lepiej odpowiadać Twoim potrzebom, przyjrzyjmy się bliżej tym opcjom.

Apache – oryginalny serwer internetowy dla bohaterów

Apache

Utworzony w 1995 roku przez Robert McCool i pierwotnie nazywany „Apache HTTP Server Project” (stąd nazwa), Apache został zaprojektowany w celu stworzenia solidnego serwera klasy komercyjnej, z którego można korzystać bezpłatnie, nawet z modyfikacjami. Bardzo szybko stał się popularny, ponieważ mógł działać na wielu różnych systemach operacyjnych, od Unixa po Windows.

Ze względu na tę długoletnią popularność, uważam Apache za serwer sieciowy „oryginalnego bohatera”. Jest solidny, dobrze udokumentowany i wspierany przez otwartą społeczność programistów pod auspicjami Apache Software Foundation.

Nginx – Tytan nowej ery

nginx

Nginx (wymawiane jako „Engine X”) to serwer HTTP i odwrotny serwer proxy, serwer proxy poczty i ogólny serwer proxy TCP/UDP używany do hostowania witryn i aplikacji o różnych rozmiarach. Po raz pierwszy została publicznie wydana przez rosyjskiego programistę Igor Sysoev. Początkowym celem Nginx było rozwiązanie problemu C10K, z którym Apache miał problemy. 

Przeczytaj również

Znaczące różnice między Nginx i Apache

Architektura

Nginx i Apache mają pewne podobieństwa w swojej podstawowej architekturze. Na przykład obaj używają procesów mistrz-pracownik w celu poprawy wydajności. Mają nawet podobne pliki konfiguracyjne. Jednak różnice w stylu architektonicznym powodują znaczne zróżnicowanie wydajności w szerokim ujęciu.

Nginx ma przyjazną dla zasobów architekturę opartą na zdarzeniach, która wykorzystuje małe, ale stałe ilości pamięci pod obciążeniem. Ta cecha sprawia, że ​​jest idealny do hostingu witryn o dużym natężeniu ruchu lub takich, które mają sporadyczne skoki ruchu.

Oparta na procesach architektura Apache obsługuje każde połączenie za pośrednictwem dedykowanego wątku, co wymaga większej ilości pamięci. Jednak skaluje się lepiej pod dużym obciążeniem na maszynach z większą liczbą rdzeni procesora i pamięci RAM.

Użycie pamięci

Nginx jest znany z wysokiej wydajności i niskiego zużycia zasobów. Z drugiej strony Apache może intensywnie wykorzystywać pamięć, szczególnie w przypadku uruchamiania wielu bloków serwera. Chociaż oba używają pamięci do obsługi żądań HTTP, Nginx jest lżejszy. 

Projekt Apache oznaczał, że tworzył jeden wątek na połączenie, a każdy wątek zużywał określoną ilość pamięci RAM. Wraz ze wzrostem ruchu może to prowadzić do problemów, ponieważ wymagana byłaby większa ilość pamięci RAM, szczególnie na serwerach z mniejszą ilością pamięci. Apache tworzy również nowe procesy dla każdego żądania, nawet od tego samego użytkownika.

Dla porównania, Nginx używa jednego procesu do obsługi wielu połączeń jednocześnie. 

Obsługa PHP

Ponieważ oba te serwery sieciowe działają głównie z PHP, sposób, w jaki radzą sobie z kodem, oznacza znaczny potencjał wydajności. Nginx domyślnie nie wykonuje PHP bezpośrednio. Zamiast tego przekazuje żądanie do PHP-FPM (FastCGI Process Manager), który obsługuje żądanie i wysyła odpowiedź z powrotem do Nginx, który następnie przesyła zawartość z powrotem do klienta.

Ponieważ Nginx nie czeka na odpowiedź z PHP-FPM, aby obsłużyć kolejne żądanie (podobnie jak nie czeka na odpowiedź od klientów podczas obsługi treści statycznej), Nginx może obsłużyć więcej żądań jednocześnie niż Apache.

Apache używa modułu o nazwie mod_php do wykonywania kodu PHP. W tym modelu za każdym razem, gdy przychodzi żądanie HTTP, Apache tworzy nowy proces lub wątek (w zależności od konfiguracji) do obsługi tego żądania. Ten proces jest również odpowiedzialny za obsługę wszelkich żądań PHP w ramach tego żądania.

Ten model działa, ale ma pewne wady. Po pierwsze, tworzenie nowego procesu dla każdego żądania może być intensywne w systemie, zwłaszcza jeśli jest wiele jednoczesnych żądań. Generowanie nowego procesu dla każdego żądania PHP w ramach żądania jest jeszcze bardziej intensywne, ponieważ system operacyjny musi stworzyć zupełnie nowy interpreter dla każdego z nich.

Jak wybrać między Nginx a Apache

Jak widać, nie ma wyraźnego zwycięzcy między tymi kolosami serwerów internetowych. Zależy to głównie od tego, czego potrzebujesz do zarządzania serwerem WWW. 

Wybierz Apache, jeśli: 

  • Prowadzisz witrynę internetową o średniej/dużej skali, która prawdopodobnie z czasem znacznie się rozwinie i wymaga niestandardowych modułów.
  • Masz włączonych wiele wirtualnych hostów lub modułów na swoim serwerze i potrzebujesz ich wszystkich podczas uruchamiania.
  • Prowadzisz małą witrynę internetową i nie chcesz tracić czasu na naukę poprawnej konfiguracji Nginx.

Użyj Nginx, jeśli:

  • Prowadzisz rozbudowaną witrynę internetową i chcesz jednocześnie łatwo skonfigurować buforowanie i równoważenie obciążenia, nie martwiąc się o ograniczenia sprzętowe.

Ostatnie przemyślenia na temat Nginx vs Apache

To, czy uruchomisz Apache, czy Nginx, będzie zależeć od Twoich potrzeb i używanego sprzętu. Możesz użyć dowolnej opcji do obsługi witryn PHP. Ale jest o wiele więcej do rozważenia niż tylko to. 

Jeśli masz prostą stronę internetową, możesz nie zauważyć między nimi żadnej różnicy. Ale jeśli Twoja witryna generuje większy ruch i rośnie, musisz wiedzieć, jak każdy serwer działa i skaluje się pod obciążeniem.

Przeczytaj również

O Timothy Shim

Timothy Shim jest pisarzem, redaktorem i tech geekiem. Rozpoczynając karierę w dziedzinie technologii informatycznych, szybko znalazł drogę do druku i od tego czasu współpracował z międzynarodowymi, regionalnymi i krajowymi tytułami medialnymi, takimi jak ComputerWorld, PC.com, Business Today i The Asian Banker. Jego wiedza specjalistyczna dotyczy technologii zarówno z punktu widzenia konsumenta, jak i przedsiębiorstwa.