Apache i Nginx. Połączone jednym łańcuchem

Jak zaimplementowano kombinację Apache i Nginx w Timeweb

Dla wielu firm Nginx + Apache + PHP to bardzo typowa i powszechna kombinacja, a Timeweb nie jest wyjątkiem. Jednak dokładne zrozumienie sposobu jego wdrożenia może być interesujące i przydatne.

Apache i Nginx. Połączone jednym łańcuchem

Zastosowanie takiego połączenia jest oczywiście podyktowane potrzebami naszych klientów. Zarówno Nginx, jak i Apache odgrywają szczególną rolę, każdy rozwiązuje konkretny problem.

Ustawienia podstawowe Apache są wykonywane w plikach konfiguracyjnych samego Apache, a ustawienia witryn klienckich następują poprzez plik .htaccess. .htaccess to plik konfiguracyjny, w którym klient może samodzielnie konfigurować reguły i zachowanie serwera WWW. To ustawienie będzie dotyczyć konkretnie jego witryny. Na przykład dzięki funkcjonalności Apache użytkownicy mogą zmienić tryb działania w ramach tej samej wersji PHP z mod_php na mod_cgi; możesz ustawić przekierowania, optymalizację pod kątem SEO, wygodny adres URL, pewne ograniczenia dla PHP.

nginx używany jako serwer proxy do przekierowywania ruchu do Apache oraz jako serwer WWW do obsługi treści statycznych. Opracowaliśmy także moduły bezpieczeństwa dla Nginx, które pozwalają nam chronić dane naszych użytkowników, na przykład oddzielając prawa dostępu.

Wyobraźmy sobie, że użytkownik odwiedza witrynę naszego klienta. Najpierw użytkownik trafia do Nginx, który udostępnia treści statyczne. Dzieje się to natychmiast. Następnie, jeśli chodzi o ładowanie PHP, Nginx przekazuje żądanie do Apache. Apache wraz z PHP już generuje dynamiczną treść.

Funkcje pakietu Apache i Nginx w Timeweb

Nasz wirtualny hosting wdraża 2 główne schematy operacyjne dla Apache i Nginx: Udostępnione i oddane.

Wspólny schemat

Ten schemat jest używany przez większość użytkowników. Wyróżnia się prostotą i zasobooszczędnością: schemat Shared zużywa mniej zasobów, dlatego jego taryfa jest tańsza. Według tego schematu na serwerze działa jeden Nginx, który pozwala mu obsługiwać wszystkie żądania użytkowników, oraz kilka instancji Apache.

Schemat wspólny poprawia się od dłuższego czasu: stopniowo korygowaliśmy niedociągnięcia. Dogodnie można to zrobić bez konieczności modyfikowania kodu źródłowego.

Apache i Nginx. Połączone jednym łańcuchem
Wspólny schemat

Dedykowany schemat

Dedykowany wymaga większych zasobów, przez co jego taryfa jest droższa dla klientów. W schemacie dedykowanym każdy klient otrzymuje swój własny, oddzielny serwer Apache. Zasoby tutaj są zarezerwowane dla klienta, są przydzielane wyłącznie. Jak to działa: Na serwerze znajduje się kilka wersji PHP. Obsługujemy wersje 5.3, 5.4, 5.6, 7.1, 7.2, 7.3, 7.4. Tak więc dla każdej wersji PHP uruchamiany jest własny Apache.

Apache i Nginx. Połączone jednym łańcuchem
Dedykowany schemat

Bezpieczna strefa. Konfigurowanie stref w Nginx

Wcześniej w przypadku Nginx używaliśmy wielu stref pamięci współdzielonej (stref) - po jednym bloku serwera na domenę. Ta konfiguracja wymaga dużo zasobów, ponieważ dla każdej witryny tworzona jest osobna strefa. Jednak w ustawieniach Nginx większość stron jest tego samego typu, więc można je umieścić w jednej strefie dzięki zastosowaniu dyrektyw map w module ngx_http_map_module, które pozwalają na określenie korespondencji. Przykładowo mamy szablon strefy, w którym musimy podać zmienne: ścieżkę do serwisu, wersję PHP, użytkownika. Tym samym przyspieszono ponowne odczytanie konfiguracji Nginx, czyli przeładowanie.

Ta konfiguracja znacznie zaoszczędziła zasoby pamięci RAM i przyspieszyła Nginx.

Ponowne załadowanie nie będzie działać!

W schemacie Shared pozbyliśmy się konieczności ponownego ładowania Apache przy zmianie ustawień strony. Wcześniej, gdy jeden klient chciał dodać domenę lub zmienić wersję PHP, wymagane było obowiązkowe przeładowanie Apache, co prowadziło do opóźnień w odpowiedziach i negatywnie wpływało na wydajność witryny.

Pozbyliśmy się przeładowań tworząc dynamiczne konfiguracje. Dzięki mpm-itk (moduł Apache), każdy proces działa jako oddzielny użytkownik, co zwiększa poziom bezpieczeństwa. Ta metoda pozwala na przesłanie danych o użytkowniku i jego document_root z Nginx do Apache2. Tym samym Apache nie zawiera konfiguracji witryn, odbiera je dynamicznie i przeładowania nie są już potrzebne.

Apache i Nginx. Połączone jednym łańcuchem
Konfiguracja schematu udostępnionego

A co z Dockerem?

Wiele firm przeszło na system oparty na kontenerach. Firma Timeweb rozważa obecnie możliwość takiego przejścia. Oczywiście każda decyzja ma swoje plusy i minusy.

Oprócz niezaprzeczalnych zalet system kontenerowy zapewnia użytkownikowi mniej zasobów. W Timeweb, dzięki opisanemu schematowi hostingu, użytkownik nie ma ograniczeń w zakresie pamięci RAM. Otrzymuje więcej zasobów niż jest w kontenerze. Dodatkowo użytkownik może mieć załadowanych więcej modułów Apache.

Timeweb obsługuje około 500 000 stron internetowych. Bierzemy na siebie wielką odpowiedzialność i nie dokonujemy natychmiastowych, nieuzasadnionych zmian w złożonej architekturze. Połączenie Apache i Nginx jest niezawodne i sprawdzone. My z kolei staramy się osiągnąć maksymalną wydajność poprzez unikalne konfiguracje.

Aby uzyskać wysoką jakość i szybkie działanie dużej liczby witryn, musisz użyć szablonu i dynamicznej konfiguracji Apache i Nginx. Pozwala łatwo i szybko administrować dużą liczbą podobnych serwerów.

Źródło: www.habr.com

Dodaj komentarz