Apache & Nginx. Powiązane łańcuchem

Jak zrealizowano połączenie Apache & Nginx w Timeweb

Dla wielu firm połączenie Nginx + Apache + PHP to bardzo typowe i powszechne rozwiązanie, a Timeweb nie jest w tym wyjątkiem. Zrozumienie, jak dokładnie jest to zrealizowane, może być ciekawe i przydatne.

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

Użycie 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 określony problem.

Podstawowe ustawienia Apache są realizowane w plikach konfiguracyjnych samego Apache, a настройки dla klientów odbywają się poprzez plik .htaccess. .htaccess to plik konfiguracyjny, w którym klient może samodzielnie ustawić zasady i zachowanie serwera WWW. Takie ustawienia będą dotyczyć konkretnie jego strony. Na przykład dzięki funkcjonalności Apache użytkownicy mogą zmieniać tryb pracy w ramach jednej wersji PHP z mod_php na mod_cgi; można ustawiać przekierowania, optymalizację SEO, wygodne URL, pewne limity dla PHP.

Nginx służy jako serwer proxy do przekierowywania ruchu do Apache oraz jako serwer www dla dostarczania treści statycznych. Dla Nginx opracowaliśmy również moduły zabezpieczeń, które pozwalają chronić dane naszych użytkowników, na przykład dzieląc prawa dostępu.

Załóżmy, że jakiś użytkownik wchodzi na stronę naszego klienta. Najpierw użytkownik trafia na Nginx, który dostarcza treści statyczne. Dzieje się to natychmiast. Następnie, gdy przychodzi do ładowania PHP, Nginx przekierowuje zapytanie do Apache. I Apache wspólnie z PHP generuje dynamiczną treść.

Cechy połączenia Apache & Nginx w Timeweb

Na naszym wirtualnym hostingu zaimplementowane są 2 podstawowe schematy pracy Apache & Nginx: Shared i Dedicated.

Schemat Shared

Ten schemat jest używany przez większość użytkowników. Charakteryzuje się prostotą i niskim zużyciem zasobów: schemat Shared zużywa mniej zasobów, dlatego jego cena jest niższa. Zgodnie z tym schematem na serwerze działa jeden Nginx, który obsługuje wszystkie zapytania użytkowników, oraz kilka egzemplarzy Apache.

Schemat Shared był długo doskonalony: stopniowo poprawialiśmy jego niedociągnięcia. Wygodne jest to, że można go zrobić bez konieczności modyfikacji kodu źródłowego.

Apache & Nginx. Połączone jednym łańcuchem
schemat Shared

Schemat Dedicated

Dedicated wymaga większych zasobów, dlatego jej taryfa jest droższa dla klientów. W schemacie Dedicated dla każdego klienta uruchamiany jest oddzielny Apache. Zasoby są tutaj rezerwowane dla klienta, są przydzielane wyłącznie. Jak to działa: na serwerze jest kilka wersji PHP. Obsługujemy wersje 5.3, 5.4, 5.6, 7.1, 7.2, 7.3, 7.4. W ten sposób dla każdej wersji PHP uruchamiany jest swój własny Apache.

Apache & Nginx. Połączone jednym łańcuchem
schemat Dedicated

Strefa bezpieczna. Konfiguracja stref w Nginx

Wcześniej dla Nginx używaliśmy wielu stref pamięci dzielonej (zone) — jeden blok server na jeden domenę. Taka konfiguracja wymaga dużej ilości zasobów, ponieważ dla każdej strony tworzona jest osobna strefa. Jednak w ustawieniach Nginx większość stron jest podobna, dlatego można je umieścić w jednej strefie dzięki zastosowaniu dyrektywy map w module ngx_http_map_module, które pozwalają ustalić powiązania. Na przykład mamy szablon strefy, do której musimy dostarczać zmienne: ścieżka do strony, wersja PHP, użytkownik. Dzięki temu przyspieszyło ponowne ładowanie konfiguracji Nginx, czyli reload.

Taka konfiguracja znacząco zaoszczędziła zasoby pamięci RAM i przyspieszyła działanie Nginx.

Reload nie przejdzie!

W schemacie Shared pozbyliśmy się konieczności przeładowania (reload) Apache przy zmianach w ustawieniach stron. Wcześniej, gdy jeden klient chciał dodać domenę lub zmienić wersję PHP, wymagany był obowiązkowy reload Apache, co prowadziło do opóźnień w odpowiedziach i negatywnie wpływało na wydajność stron.

Pozbyliśmy się reloadów poprzez stworzenie dynamicznych konfiguracji. Dzięki mpm-itk (modułowi Apache), każdy proces działa jako oddzielny użytkownik, co zwiększa poziom bezpieczeństwa. Taki sposób pozwala na przesyłanie z Nginx do Apache2 danych o użytkowniku i jego document_root. W ten sposób Apache nie zawiera w sobie konfiguracji stron, otrzymuje je dynamicznie i reloady przestają być potrzebne.

Apache & Nginx. Połączone jednym łańcuchem
Konfiguracja schematu Shared

A co z Dockerem?

Wiele firm przeszło na system oparty na kontenerach. Timeweb obecnie rozważa możliwość takiego przejścia. Bez wątpienia w każdej decyzji można znaleźć zalety i wady.

W porównaniu do niezaprzeczalnych zalet systemu kontenerowego, użytkownik ma mniej zasobów. W Timeweb, dzięki opisanej metodzie działania hostingu, użytkownik nie ma ograniczeń dotyczących pamięci operacyjnej. Zyskuje więcej zasobów niż w kontenerze. Ponadto użytkownik może załadować więcej modułów Apache.

Timeweb obsługuje około 500 000 stron internetowych. Poniesiemy dużą odpowiedzialność i nie wprowadzamy nagłych, nieuzasadnionych zmian w skomplikowanej architekturze. Połączenie Apache & Nginx jest niezawodne i sprawdzone w praktyce. Z naszej strony staramy się osiągnąć maksymalną wydajność dzięki unikalnym konfiguracjom.

Aby zapewnić wysoką jakość i szybkość działania dużej liczby stron internetowych, należy zastosować szablonową i dynamiczną konfigurację Apache oraz Nginx. Umożliwia to łatwe i szybkie zarządzanie dużą liczbą jednorodnych serwerów.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster