Nginx vs Apache jako odwrotny serwer proxy, który wybrać

36

tego rodzaju pytanie może zostało zadane tutaj, ale nie mogłem znaleźć żadnego, które pasowałoby do mojego pytania. Słyszałem, że wydajność Nginx jest imponująca, ale Apache ma więcej dokumentów, społeczności (czytaj: ekspert), aby uzyskać pomoc

Teraz chcę wiedzieć, jak oba serwery WWW porównują pod względem wydajności, łatwości konfiguracji, poziomu dostosowania itp. JAKO serwer REVERSE PROXY w środowisku VPS?

Wciąż ważę między nimi dla rubinowej aplikacji internetowej (nie ROR) obsługiwanej z cienką (jedną z Ruby web server).
Konkretna odpowiedź będzie mile widziana. Ogólna odpowiedź nie dotykająca ruby ​​jest w porządku. Nadal jestem noob w administracji serwerem WWW.

mhd
źródło
Odpowiedź od Martina i Webdestroya, teraz pochylam się w kierunku Nginx
md
Czy nie ma większego sensu stosowanie specjalnie zaprojektowanego odwrotnego proxy, takiego jak lakier?
ptman

Odpowiedzi:

31

Chciałem umieścić to w komentarzu, ponieważ zgadzam się z najważniejszym punktem odpowiedzi webdestroyas, ale stało się to trochę za długo.

Jesteś w środowisku VPS, co oznacza, że ​​najprawdopodobniej będziesz miał mało pamięci RAM. Tylko z tego powodu będziesz chciał Nginx, ponieważ jego pamięć jest mniejsza niż Apache.

Nie zgadzam się również z niektórymi z wymienionych argumentów.

Łatwość konfiguracji:
Nginx nie jest trudniejszy niż Apache. To jest inne. Jeśli jesteś przyzwyczajony do Apache, zmiana zawsze będzie trudniejsza, nie oznacza to, że sam styl konfiguracji jest trudniejszy. Migrowałem całkowicie z Apache do Nginx ponad rok temu i dzisiaj miałbym problem z konfiguracją serwera Apache, podczas gdy uważam, że Nginx jest bardzo łatwy do skonfigurowania.

W przypadku Ruby:
Nginx ma Passenger, jednak zazwyczaj widzę, że jest to opisywane jako gorsza metoda łączenia się z Ruby. Nie jestem programistą Ruby, więc nie mogę tego zweryfikować, ale często widzę Unicorn i Thin jako lepszą alternatywę.

Podsumowując:
Nginx został stworzony jako odwrotny serwer proxy. Początkowo wystarczyło udostępnić pliki statyczne i odwrócić proxy do serwera zaplecza przez HTTP / 1.0. Od tego czasu dodano fastcgi, równoważenie obciążenia i różne inne funkcje, ale jego pierwotnym celem było podawanie plików statycznych i odwrotnego proxy. I robi to naprawdę dobrze.

Przeciwnie, Apache jest serwerem WWW ogólnego przeznaczenia. Nie mam wątpliwości, że może doskonale odwrócić proxy, ale nie został zaprojektowany tak, aby miał minimalny rozmiar pamięci, w wyniku czego wymaga więcej zasobów niż Nginx, co oznacza, że ​​mój początkowy argument środowiska VPS wchodzi w grę.

Martin Fjordvald
źródło
+1 za wyjaśnienie.
John Gardeniers,
Chciałbym posunąć się tak daleko, że polecam go jako jedyny serwer internetowy. zobacz moje komentarze serverfault.com/questions/133481/… <- tutaj. Używam go jako jedynego serwera WWW na moim VPS i innych użytkowników założyłem FastCGI dla ich aplikacji PHP / CGI.
Jason
Jason Używam go jako jedynego serwera internetowego od ponad roku i obsługuje miliony ładowań stron dziennie. W pełni zgadzam się z twoją rekomendacją! :)
Martin Fjordvald
8

Wydajność:
NGinX. Ten serwer jest znany jako jeden z najlepiej działających serwerów internetowych i jest używany przez wiele różnych firm (Notable, MediaTemple)

Łatwość konfiguracji:
Apache. Konfiguracja Apache jest naprawdę prosta i bardzo wydajna. Nginx jest potężny, ale może być bardzo trudny do zrozumienia, ponieważ bardziej przypomina język programowania niż plik konfiguracyjny.

Poziom dostosowania:
Apache. Apache ma dla niego mnóstwo modów i innych wtyczek. Chociaż Nginx wciąż ma do tego przygotowane wtyczki, myślę, że Apache ma o wiele więcej niż Nginx.

Dla Ruby:
Wiem, że Nginx może być używany jako potężny moduł równoważenia obciążenia w Mongrel / webrick. Jednak Apache ma Phusion / Passenger, dzięki czemu integracja jest przyjemniejsza.

Zwycięzca odwrotnego proxy:
NGinX

Mitch Dempsey
źródło
2
Jestem zainteresowany, nie kłócę się. Dlaczego Nginx jest zwycięzcą w zakresie odwrotnego proxy? Reszta twojej odpowiedzi tak naprawdę nie wyróżnia się spośród innych. Jeśli już, to faworyzuje Apache.
John Gardeniers,
1
Cóż, ponieważ w większości przypadków potrzebujesz odwrotnego proxy z powodu dużego obciążenia. Co oznaczałoby, że wydajność jest prawdopodobnie największym problemem, w którym to przypadku Nginx był zwycięzcą i dlatego wybrałem ją. Jako programista uwielbiam apache, ale z punktu „jak uzyskać największą wydajność z tego serwera WWW”, wybrałbym Nginx
Mitch Dempsey
8

Nginx jest oparty na zdarzeniach, podczas gdy apache jest oparty na procesach. Pod dużym obciążeniem robi to różnicę na świecie ... Apache musi rozwidlać lub rozpocząć nowy wątek dla każdego połączenia, podczas gdy nginx nie. Różnica ta widoczna jest głównie w zużyciu pamięci, ale także w czasie reakcji użytkownika i innych wskaźnikach wydajności. Nginx może obsługiwać dziesiątki tysięcy jednoczesnych połączeń HTTP HTTP na nowoczesnym sprzęcie. Apache zużyje 1-2 MB stosu dla każdego połączenia, więc robiąc matematykę widzisz, że możesz obsłużyć tylko kilkaset, a może tysiące połączeń jednocześnie, bez konieczności zamiany.

Używamy nginx przed Apache i IIS w naszym środowisku jako proxy równoważenia obciążenia i buforowania, i nie może być szczęśliwszy. Używamy dwóch małych pudełek Nginx zamiast pary bardzo drogich dzierżawionych urządzeń F5, a nasze strony są znacznie szybsze zarówno w odczuciu, jak i mierzonych czasach odpowiedzi.

rmalayter
źródło
1

Byłem w tym samym dylemacie co Ty około dwa tygodnie temu.

Aby dać Ci bardzo zwięzłą odpowiedź: z moich badań nginx jest naprawdę szybki i przyjazny dla zasobów, ale udało się go jedynie odwrócić statyczne pliki proxy. Reszta opiera się na rozwiązaniach, które musisz skonfigurować lub wykonać skrypt.

AFAIK nginx nie ma plików htaccess, więc musisz znaleźć drogę, jeśli zależy od tej funkcji.

AFAIK wszystko, co potrzebne działa i widziałem tutoriale.

Pójdę z nginx z moją konfiguracją testowania i profilowania. Mam typową aplikację LAMP.

Czytałem, że są ludzie, którzy odwracają proxy i obsługują pliki statyczne z nginx i przekazują wszystko inne, takie jak PHP, do działającej instancji Apache. Twierdzą, że to dobry kompromis. Nie mam danych o wydajności, ale możesz chcieć wiedzieć.

deploymonkey
źródło
2
Wyłączanie zastępowania htaccess w apache ze względów wydajnościowych jest dość powszechne, obsługa takiej funkcji na serwerze zaprojektowanym pod kątem wysokiej wydajności nie miałby większego sensu.
kolejne
Dziękujemy za dodanie tego oświadczenia. OP nie jest profesjonalnym administratorem, więc musimy to wyjaśnić.
deploymonkey
1

W ciągu ostatnich kilku lat miałem poważne problemy z mod_proxy Apache'a na różnych platformach w różnych środowiskach. Od czasu do czasu po prostu przestanie działać, a jedynym lekarstwem wydaje się być ponowne uruchomienie serwera Apache.

Osobiście nie pytałbym „nginx vs Apache”, ale „nginx vs lighttpd” - i to jest znacznie trudniejsze połączenie!

Mo.
źródło
Prawidłowy argument, ale kiedy ostatnio sprawdzałem, lighttpd wciąż miał długie zaległe błędy i był znany z wycieków pamięci. Odradzono administratorom wdrażanie produkcji. Czy to się zmieniło?
deploymonkey
Z pewnością ma pewne zastrzeżenia (szczególnie w przypadku obsługi bardzo dużych plików), ale jest znacznie bardziej stabilny niż serwer proxy Apache jako serwer proxy - nie miałem prawdziwych problemów z kilkoma wdrożeniami w ciągu ostatnich sześciu miesięcy
pon
Z jakiegoś zapomnianego powodu
odpisałem