Obie nginx oraz Apache są dojrzałymi produktami z bogatymi zestawami funkcji i wysoką wydajnością. Mają wspólne pochodzenie open-source i można je wdrażać na serwerach Windows lub Linux.
Jednak pewne kluczowe różnice mogą sprawić, że podejmiesz decyzję o wyborze jednej z nich.
Na przykład, Apache to kompleksowe rozwiązanie, które obsługuje wiele różnych technologii i modułów od razu po wyjęciu z pudełka. W przeciwieństwie do tego, Nginx opiera się na modułach innych firm, aby rozszerzyć swoją funkcjonalność.
Aby dowiedzieć się, który serwer WWW lepiej odpowiada Twoim potrzebom, przyjrzyjmy się bliżej tym opcjom.
Przegląd
Apache, Oryginalny Serwer Sieciowy Hero
Utworzony w 1995 roku przez Robert McCool i pierwotnie nazywany „Apache „Projekt serwera HTTP” (stąd nazwa), Apache został zaprojektowany, aby stworzyć solidny serwer klasy komercyjnej, który jest darmowy w użyciu, nawet z modyfikacjami. Stał się popularny bardzo szybko, ponieważ mógł działać na wielu różnych systemach operacyjnych, od Unix do Windows.
Ze względu na tę długotrwałą popularność uważam, że Apache jako serwer sieciowy „oryginalnego bohatera”. Jest solidny, dobrze udokumentowany i wspierany przez otwartą społeczność programistów pod auspicjami Apache Fundacja Oprogramowania.
Nginx, Tytan Nowej Ery
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 internetowych i aplikacji o dowolnej wielkości. Został po raz pierwszy publicznie wydany przez rosyjskiego dewelopera Igor SysojewPoczątkowym celem Nginx było rozwiązanie problemu C10K, który Apache trudno było sobie z tym poradzić.
W 2019 r. Nginx stał się częścią F5 Networks. F5 to firma technologiczna specjalizująca się w bezpieczeństwie aplikacji, zarządzaniu wieloma chmurami i zapobieganiu oszustwom online.
Udziały w rynku i funkcje
Udziały rynkowe
Kluczowe różnice
| Udogodnienia | nginx | Apache |
|---|---|---|
| wprowadzony | 2004 | 1995 |
| Obecna stabilna wersja | Nginx 1.27.0 | Apache 2.4.63 |
| Architektura | Oparte na wydarzeniach | Oparte na procesie |
| open Source | Tak | Tak |
| Rozwój i wsparcie | Apache Foundation | Sieci F5 |
| Obsługiwane platformy | Głównie Unix | Unix i Windows |
| Wiele równoczesnych żądań | Tak | Nie |
| Natywne przetwarzanie dynamicznej zawartości | Nie | Tak |
| Modułowe | Tak | Tak |
| Konfiguracja | Ograniczony | na katalog poprzez .htaccess |
| Poproś o interpretację | Przekazuje URI | Przejścia Lokalizacja systemu plików |
Architektura rdzenia
Nginx i Apache mają pewne podobieństwa w swojej podstawowej architekturze. Na przykład, oba używają procesów master-worker, aby poprawić wydajność. Mają nawet podobne pliki konfiguracyjne. Jednak różnice w stylu architektonicznym skutkują znaczną zmiennością wydajności w szerokim zakresie.
Nginx ma przyjazną dla zasobów architekturę opartą na zdarzeniach, która wykorzystuje niewielkie, ale stałe ilości pamięci pod obciążeniem. Ta cecha sprawia, że idealnie nadaje się do hostowania witryn o wysokim poziomie ruchu lub takich, które mają okresowe skoki ruchu.
ApacheArchitektura oparta na procesach obsługuje każde połączenie za pośrednictwem dedykowanego wątku, co wymaga więcej pamięci. Jednak lepiej skaluje się przy dużych obciążeniach na maszynach z większą liczbą rdzeni procesora i pamięci RAM.
Użycie pamięci
Nginx jest znany ze swojej wysokiej wydajności i niskiego zużycia zasobów. Z drugiej strony, Apache może być intensywnie pamięciochłonny, zwłaszcza podczas uruchamiania wielu bloków serwera. Podczas gdy oba używają pamięci do obsługi żądań HTTP, Nginx jest lżejszy.
Konstrukcja Apache oznaczało, że tworzyło jeden wątek na połączenie, a każdy wątek używał określonej ilości pamięci RAM. Wraz ze wzrostem ruchu mogło 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 wykorzystuje jeden proces do obsługi wielu połączeń jednocześnie.
PHP Prowadzenie
Ponieważ oba te serwery internetowe działają głównie z PHP, sposób w jaki radzą sobie z kodem oznacza znaczny potencjał wydajnościowy. Nginx nie wykonuje PHP bezpośrednio domyślnie. 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ź od PHP-FPM do obsługi innego żądania (podobnie jak nie czeka na odpowiedź od klientów podczas obsługi statycznej zawartości), Nginx może obsługiwać więcej żądań jednocześnie niż Apache będzie w stanie sobie poradzić.
Apache używa modułu o nazwie mod_php do wykonania PHP kod. W tym modelu za każdym razem, gdy przychodzi żądanie HTTP, Apache tworzy nowy proces lub wątek (w zależności od konfiguracji), aby obsłużyć to żądanie. Ten proces jest również odpowiedzialny za obsługę wszelkich PHP żądania 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 dla systemu, zwłaszcza jeśli występuje wiele jednoczesnych żądań. Generowanie nowego procesu dla każdego PHP każde żądanie w ramach innego żądania jest jeszcze bardziej intensywne, ponieważ system operacyjny musi utworzyć zupełnie nowy interpreter dla każdego żądania.
Test wydajności
W szczegółowy raport z testów wydajności od CyberPanel, kilka kluczowych testów podkreśla różnice między Nginx i ApacheAby poznać cały proces testowania, obejrzyj poniższy film.
W skrócie:
- nginx:Obsługuje do 10,000 2.5 równoczesnych połączeń przy niskim zużyciu pamięci. W testach porównawczych obsługuje statyczną zawartość do XNUMX razy szybciej niż Apache.
- Apache:W porównaniu, Apache jest skuteczny, ale mniej wydajny niż Nginx dla treści statycznych. Dzięki swojej architekturze opartej na procesach, ApacheWydajność programu może ulec pogorszeniu w przypadku dużej współbieżności ze względu na obciążenie związane z zarządzaniem wieloma procesami.
Nginx kontra Apache dla WordPress
W kontekście WordPress wydajność, Nginx znacznie poprawia czas ładowania, zwłaszcza w przypadku treści statycznych, co czyni go preferowanym wyborem w przypadku witryn o dużym ruchu WordPress witryn. Jego architektura oparta na zdarzeniach umożliwia wydajną obsługę równoczesnych połączeń, co skutkuje szybszymi czasami reakcji i zmniejszonym obciążeniem serwera.
Apachez drugiej strony oferuje solidne dynamiczne przetwarzanie treści z modułami takimi jak mod_php, co może uprościć wdrożenie WordPress witryn, które w dużym stopniu opierają się na dynamicznej zawartości. Jednak Nginx ogólnie zapewnia lepszą wydajność i efektywność zasobów dla WordPress środowiska skoncentrowane na dostarczaniu treści statycznych.
Jak wybrać pomiędzy Nginx i Apache
Jak widać, nie ma wyraźnego zwycięzcy pomiędzy tymi gigantami serwerów WWW. Zależy to głównie od tego, do czego potrzebujesz serwera WWW.
Dodaj Apache gdyby:
- Systemy starsze i zgodność: Apache jest często preferowanym wyborem dla systemów, które używają go od dłuższego czasu ze względu na jego długotrwałą obecność na rynku. Jeśli Twoja infrastruktura w dużym stopniu polega na .htaccess pliki do konfiguracji dla poszczególnych katalogów, Apache jest bardziej odpowiedni, ponieważ obsługuje te pliki natywnie, umożliwiając zdecentralizowaną konfigurację i elastyczność w środowiskach współdzielonego hostingu.
- Dynamiczne przetwarzanie treści:Jeśli Twoje aplikacje wymagają intensywnego przetwarzania dynamicznej zawartości, takiej jak PHP, skrypty Pythona lub Ruby, Apache może być korzystne ze względu na możliwość osadzania procesorów bezpośrednio w swoich modułach. Ta konfiguracja upraszcza wykonywanie dynamicznych skryptów bezpośrednio w serwerze.
- Łatwość użytkowania i dokumentacja: Apacheszerokie przyjęcie oznacza, że ma ogromną ilość dokumentacji i wsparcia społeczności. Łatwiej jest znaleźć przewodniki, samouczki i wsparcie dla Apache- związanych z tym kwestii, co czyni ją bardziej przyjazną użytkownikowi opcją dla początkujących lub tych, którzy preferują obszerną bazę wiedzy.
Użyj Nginx jeśli:
- Wysoka wydajność i Scalazdolność: Nginx jest zoptymalizowany do obsługi dużej liczby równoczesnych połączeń, co czyni go idealnym dla witryn o dużym ruchu lub aplikacji wymagających skalowalności. Jego architektura oparta na zdarzeniach umożliwia obsługę wielu połączeń przy niskim zużyciu pamięci, co czyni go wydajnym w przypadku dostarczania statycznej zawartości.
- Równoważenie obciążenia i odwrotny serwer proxy: Nginx jest często używany jako odwrotny serwer proxy i moduł równoważenia obciążenia, rozdzielając przychodzący ruch na wiele serwerów zaplecza. Ta funkcja sprawia, że Nginx jest doskonałym wyborem dla konfiguracji o wysokiej dostępności i środowisk wymagających wydajnego rozdzielania obciążenia.
- Dostarczanie treści statycznych:Jeśli Twoja aplikacja obsługuje znaczną ilość treści statycznej, takiej jak obrazy, CSS lub JavaPliki skryptowe, Nginx wyróżnia się szybkością i wydajnością w bezpośrednim dostarczaniu plików statycznych. Jego architektura umożliwia szybkie dostarczanie zasobów statycznych przy minimalnym narzucie.
- Prostota konfiguracji:Chociaż Nginx nie obsługuje .htaccess pliki, jego składnia konfiguracji jest prosta i łatwa do zrozumienia. Ta prostota może być korzystna dla tych, którzy chcą zachować czyste i proste konfiguracje serwera.
Połączone użycie
W przypadku wielu konfiguracji użycie obu Apache i Nginx razem mogą wykorzystać mocne strony każdego z nich.
Typową konfiguracją jest umieszczenie Nginx jako odwrotnego serwera proxy przed ApacheDzięki temu Nginx może wydajnie obsługiwać zawartość statyczną i równoczesne połączenia, Apache zarządza dynamicznym przetwarzaniem treści. To hybrydowe podejście może optymalizować wydajność i wykorzystanie zasobów w złożonych środowiskach internetowych.
Uwagi końcowe
Czy biegasz Apache lub Nginx będzie zależeć od Twoich potrzeb i sprzętu, którego używasz. Możesz użyć dowolnej opcji do obsługi PHP strony internetowe. Ale jest o wiele więcej do rozważenia niż tylko to.
Jeśli masz prostą witrynę, możesz nie zauważyć żadnej różnicy między nimi. Ale jeśli Twoja witryna ma większy ruch i rośnie, musisz wiedzieć, jak każdy serwer działa i skaluje się pod obciążeniem.