Serwery Apache kontra Nginx: najważniejsze informacje na temat tych dwóch typów serwerów
Opublikowany: 2022-01-03Internet działa na zbiorze serwerów. Jednak mają one inną konfigurację niż standardowe komputery stacjonarne. Doświadczony administrator systemu lub programista back-end zoptymalizuje ten wybór do swoich potrzeb. Podstawowym sposobem na to jest wybór oprogramowania serwerowego. Jednym z popularnych porównań w tym obszarze jest Apache vs Nginx.
Dzieje się tak z wielu powodów, ale wskaźniki użytkowania i długowieczność to dwa główne. Nginx jest nowszy i prawdopodobnie lepiej radzi sobie z nowoczesnymi standardami sieciowymi. Jednak Apache też nie ma żadnych ciosów i jest równie zdolny do obsługi witryn internetowych milionom użytkowników na całym świecie.
W tym poście przedstawimy porównanie Apache vs Nginx. Przyjrzymy się elementom na poziomie powierzchni, takim jak popularność obu typów serwerów. Jednak zagłębimy się również w funkcje techniczne i uwagi dotyczące każdego z nich. Pod koniec poznasz tajniki obu typów oprogramowania i dowiesz się, który z nich jest najlepszy dla Twojego serwera.
Czym są Apache i Nginx
Przeczytanie tego artykułu oznacza, że prawdopodobnie rozumiesz, że serwer WWW wymaga specjalistycznego oprogramowania w celu zapewnienia optymalnej wydajności. Chociaż ten artykuł nie zawiera informacji o tym, czym jest oprogramowanie serwerowe lub co robi w ogólnym sensie, omówimy dwa z wiodących rozwiązań dla Twojego serwera:
- Apache. Jest to darmowe oprogramowanie o otwartym kodzie źródłowym, które jest preinstalowane z większością „dystrybucji” Linuksa. Istnieje od 1995 roku i dzięki tym dwóm czynnikom zajmuje niemal wiodącą pozycję na rynku.
- Nginx. Chociaż jest to względne dziecko w porównaniu z innym oprogramowaniem serwerowym, Nginx ma wielu użytkowników. W chwili obecnej jest prawie po raz pierwszy połączony z Apache dla najpopularniejszego oprogramowania serwerowego (o czym później).
Warto zauważyć, że Apache od dziesięcioleci jest wiodącym oprogramowaniem serwerowym i od tego czasu ma duży udział w rynku. Jednak Nginx jest teraz faworytem, chociaż niewiele.

PODPIS: Niebieska linia z Google Trends reprezentuje wyszukiwania Apache od 2004 roku, a czerwona linia odnosi się do Nginx.
Jeśli chodzi o to, co wnoszą Apache i Nginx, może to zapełnić kilka książek na ten temat. Jednak spróbujemy to zrobić w mniej niż 2000 słów – zaczynając od ogólnego zestawu funkcji obu.
Ogólne cechy Apache i Nginx
Ponieważ Apache i Nginx są oprogramowaniem serwera WWW HTTP, znajdziesz wiele podobieństw. Na przykład oba są open-source, co oznacza, że będą działać na różnych systemach. Co za tym idzie, oba są elastyczne i rozszerzalne, ale dla każdego typu serwera istnieją różne cele.
Jednak Apache vs Nginx nie jest prawdziwym porównaniem, ponieważ oba programy podchodzą do procesu konfiguracji serwera WWW w inny sposób. W rzeczywistości oba będą lepiej pasować do różnych zastosowań.
W dalszej części tego artykułu pokażemy ci to poprzez rozbicie szczegółów technicznych dla Apache i Nginx. Oto, co zamierzamy omówić:
- Techniczny podział każdego typu oprogramowania serwerowego, który obejmuje obsługę żądań i połączeń, technologie buforowania i nie tylko.
- Konfigurowanie i rozszerzanie Apache, w tym szczegóły dotyczące jego pliku
.htaccess
i modułów. - Jak skonfigurować Nginx i jego rozszerzalność.
Nie wydaje się to zbyt wiele do rozważenia, ale możesz rozpakować każdy z nich do wielu innych podsekcji. Zrobimy dokładnie to, zaczynając od różnic technicznych.
Różnice techniczne między Apache a Nginx
Ogólnie rzecz biorąc, Apache i Nginx podążają niemal unikalnymi i ekskluzywnymi ścieżkami, aby osiągnąć ten sam cel, jakim jest optymalny serwer WWW. Jeśli porównasz każdy z nich w szerokim zakresie, zobaczysz, jak bardzo się różnią:
- Apache wykorzystuje architekturę „sterowaną procesami”, podczas gdy Nginx używa architektury „sterowanej zdarzeniami”.
- Chociaż oba typy plików statycznych serwera (choć w inny sposób), Nginx nie obsługuje zawartości dynamicznej.
- Każdy typ oprogramowania interpretuje żądania HTTP w inny podstawowy sposób.
Przyjrzymy się niektórym z tych aspektów, zaczynając od rozważań dotyczących obsługi połączeń.
Obsługa połączenia
Przekonasz się, że Apache vs Nginx przywiązuje dużą wagę do tego, jak każdy typ obsługuje połączenia i żądania. Na przykład Apache wykorzystuje podejście oparte na procesach, w którym tworzy nowe żądanie dla każdego wątku za pomocą modułu przetwarzania o nazwie mpm_prefork
. Może to być szybkie, jeśli liczba żądań jest mniejsza niż liczba procesów, ale po tym następuje spadek wydajności.
W rzeczywistości Apache oferuje dużą elastyczność w tworzeniu algorytmu obsługi połączeń dostosowanego do Twoich potrzeb za pomocą mpm_prefork
, mpm_worker
i mpm_event
. W przeciwieństwie do tego, projekt Nginx jest taki, że stara się złagodzić negatywne aspekty wydajności, jakie ma Apache.
Robi to poprzez sposób, w jaki tworzy procesy robocze na podstawie zdarzeń. Oznacza to, że Nginx doskonale nadaje się do skalowania, ponieważ może zarządzać wieloma żądaniami w jednym wątku.
Poproś o interpretację
Zarówno Apache, jak i Nginx mają również inne podejście do interpretacji żądań, które otrzyma serwer. Na przykład Nginx używa jednolitego identyfikatora zasobów (URI) żądania, aby przetłumaczyć go na fizyczny element systemu plików.
Możesz to zobaczyć w formacie niektórych bloków konfiguracyjnych, takich jak server
i location
. Pracują razem, aby przeanalizować identyfikator URI i przekształcić go w coś w systemie plików.
server { listen 80; server_name example.org www.example.org; root /data/www; location / { index index.html index.php; } location ~* \.(gif|jpg|png)$ { expires 30d; } location ~ \.php$ { fastcgi_pass localhost:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
W przeciwieństwie do tego, korzenie Apache'a jako „czystego” oprogramowania serwera WWW oznaczają, że zakłada on i działa w oparciu o to, że każde żądanie jest zasobem w systemie plików. Jednak Apache może również współpracować z identyfikatorami URI, w których żądanie jest bardziej abstrakcyjne. Mimo to dokumentacja ostrzega przed używaniem czegokolwiek innego niż metoda oparta na plikach.
Wydajność statyczna a dynamiczna
Jeśli chodzi o wydajność, Apache vs Nginx jest ważnym czynnikiem dla prawie każdego użytkownika. W kontekście porównanie sprowadza się do tego, jak każdy typ oprogramowania obsługuje treści statyczne i dynamiczne.
Ponieważ nieodłączna architektura Apache współpracuje z systemem plików w sposób bezpośredni, świetnie nadaje się do obsługi zawartości statycznej. Jednak będzie również przetwarzać dynamiczną zawartość na serwerze, co jest podobną implementacją, która jest również elastyczna, jeśli musisz wymienić moduły w oparciu o Twoje wymagania.

Dla porównania, Nginx w ogóle nie przetwarza żadnej zawartości dynamicznej. Jest to bardziej skomplikowane, ponieważ Nginx musi przekazać te żądania do zewnętrznego pracownika lub protokołu. Mimo to zauważysz, że obciążenie wydajnościowe jest mniejsze, a Nginx może wykorzystywać inne protokoły o większej elastyczności.
W przypadku zawartości statycznej może to być tak samo proste jak Apache, aw niektórych przypadkach może być bardziej wydajną opcją. Dzieje się tak dlatego, że Nginx może skontaktować się z interpreterem, kiedy zajdzie taka potrzeba, a nie być nieodłączną częścią ogólnej wydajności oprogramowania serwera.
Rozproszony model konfiguracji Apache
Nie będzie zaskoczeniem, że Apache i Nginx mają inne podejście do konfiguracji serwera. Krótko mówiąc, konfiguracja Apache vs Nginx zależy od tego, czy możesz to zrobić na poziomie katalogu.
Apache używa modelu rozproszonego, co oznacza, że możesz skonfigurować serwer na podstawie katalogu. Zrobisz to poprzez pliki .htaccess
. Apache sprawdzi każdy komponent żądanej ścieżki pliku pod kątem pliku .htaccess
i wykona zawarte w nim dyrektywy.

Naszym zdaniem plik .htaccess
jest znacznie bardziej elastyczny niż jakikolwiek inny system. Wyszukiwanie, otwieranie i edytowanie jest szybkie. Moc na wyciągnięcie ręki do wykonywania wielu potężnych działań jest ogromna. Przekonasz się również, że serwer Apache przetworzy plik .htaccess
za każdym razem, gdy go wykryje, bez konieczności ponownego ładowania serwera.
Jest to również fantastyczne, jeśli chcesz, aby niektórzy użytkownicy kontrolowali aspekty swoich witryn, wpływając na całą konfigurację serwera. Właśnie dlatego serwery Apache są podstawą współdzielonych platform hostingowych wraz z elastycznym systemem modułów.
Moduły Apache
Możesz dynamicznie ładować i rozładowywać moduły za pomocą Apache. Jest to podobne do korzystania z wtyczek i motywów w WordPress: podstawowa funkcjonalność Apache wykonuje podstawowe kroki, podczas gdy aktywne moduły pomagają stworzyć wyjątkowe wrażenia.
Te moduły mogą pokryć dużą powierzchnię, a jest ich wiele. Moduły takie jak mod_php
mogą zmienić podstawową funkcjonalność serwera, a popularny mod_rewrite
pozwala na wykonanie wielu innych zadań:
- Ograniczanie adresów IP.
- Zmiana folderu domowego witryny.
- Przeprowadzanie przekierowań 301.
- Ustawienie domyślnej strony głównej.
Pomiędzy .htaccess
a systemem modułów dynamicznych, Apache stanowi jasny sposób dla większości użytkowników na majsterkowanie i optymalizację serwera WWW i witryny.
Scentralizowany model konfiguracji Nginx
Nginx ma scentralizowane podejście do konfiguracji serwera. Oznacza to, że istnieje jeden plik konfiguracyjny (zakończony rozszerzeniem .conf
). Czasami jest to trudne do znalezienia w zależności od struktury serwera.
Ma to kilka wyraźnych wad dla początkującego właściciela witryny, który chce wprowadzić zmiany na serwerze. W przypadku witryn na współdzielonym hostingu konfiguracja serwera jest prawie niemożliwa. Jest też znacznie mniej elastyczności.
Istnieje jednak kilka zalet związanych z wydajnością. Ponieważ Nginx ma tylko jedną lokalizację dla pliku konfiguracyjnego, a Apache może potencjalnie używać wielu lokalizacji, będzie tylko jedno wyszukiwanie. Co za tym idzie, będzie mniej spadku wydajności, aby zlokalizować również ten plik konfiguracyjny.
Przekonasz się również, że ponieważ konfiguracja jest centralna, właściciele witryn nie będą odpowiedzialni za zarządzanie aspektami związanymi z bezpieczeństwem. To kolejny dar dla podejścia Nginx, ponieważ odpowiedzialność za bezpieczeństwo spoczywa wyłącznie na administratorach systemu.
Moduły Nginx
Można śmiało powiedzieć, że system modułów Nginx nie jest ani tak liberalny ani elastyczny jak Apache, mimo że oferuje ten sam rodzaj funkcjonalności. Na przykład weźmy reguły przekierowania Nginx:
server { listen 80; server_name www.olddomain.com; return 301 $scheme://www.newdomain.com$request_uri; }
Dzieje się tak, ponieważ za pomocą Nginx nie można ich załadować jako elementów dynamicznych. Wracając do naszej analogii z WordPressem, to tak, jakby trzeba było ponownie zainstalować całą witrynę w celu dezaktywacji wtyczki.
Na pierwszy rzut oka wydaje się to niewykonalne i wydaje się być ogromną szkodą. Jednak to, czego brakuje ci w elastyczności, zyskujesz na stabilności i funkcjonalności rdzenia. Jeśli wiesz, czego potrzebuje Twój serwer w czasie kompilacji, możesz uwzględnić wszystkie te komponenty i moduły.
Należy również wziąć pod uwagę aspekt bezpieczeństwa. Ponieważ nie będziesz wymieniać modułów dynamicznych do iz systemu, będziesz wiedział, co każdy element robi i co może zrobić. Dzięki temu struktura i architektura serwera są przejrzyste i łatwiejsze w utrzymaniu, a także wydajniejsze.
Dlaczego używasz Apache lub Nginx
Podsumowując, Apache vs Nginx nie jest jednoznaczną decyzją. Po pierwsze, typowa opinia, że Nginx jest lepszy niż Apache, jest myląca. Jeśli dobrze skonfigurujesz serwer Apache, będzie on tak samo wydajny, jak równoważny serwer Nginx.
Apache doskonale nadaje się do obsługi zarówno statycznej, jak i dynamicznej zawartości w prosty sposób. Oferuje ogromną moc dla początkujących w zarządzaniu serwerem, elastyczność w konfiguracji. Ogólnie rzecz biorąc, do skonfigurowania serwera Apache będziesz potrzebować mniej wiedzy technicznej niż Nginx.
Jednak wydajność jest tam, gdzie świeci Nginx. Konfiguracja jego architektury zapewnia, że może osiągnąć więcej na cykl procesora niż serwer Apache. Dzieje się tak pomimo mniejszej elastyczności w konfiguracji.
W niektórych przypadkach możesz nie mieć wyboru Apache vs Nginx, zwłaszcza jeśli używasz współdzielonego hosta. Jeśli jednak to zrobisz, wybór będzie zależał od Twojej wiedzy, celów i potrzeb.
Streszczenie
Twój wybór oprogramowania serwerowego ma znaczenie, a Ty masz do dyspozycji niezliczone opcje. W rzeczywistości nie będziesz wybierać typu serwera z lewego pola. Zamiast tego często wybierasz dwa lub trzy typy. Apache vs Nginx to często rozważane porównanie, ponieważ oba oferują wyjątkową, długoterminową wydajność i niezawodność.
W tym artykule przyjrzeliśmy się, jak Apache vs Nginx porównuje się na tych dwóch frontach i nie tylko. Istnieje wiele kwestii technicznych, które należy przeanalizować, a to będzie miało większy wpływ na Twój wybór niż popularność określonego oprogramowania serwerowego wśród społeczności.
Czy masz opinię na temat Apache vs Nginx? Podziel się z nami swoimi przemyśleniami w sekcji komentarzy poniżej!