Do czego służy połączenie Apache i Nginx można oczywiście poszukać w innych zakątkach ogromnego Internetu, ale jestem koneserem „własnych rozwiązań”, więc napiszę to własnymi słowami. W trakcie działania serwera Apache przy każdym nowym połączeniu tworzy on nowy proces, a nawet jeśli nie ma żadnych aktywnych połączeń z serwerem, w systemie zawsze działają 4-5 procesów httpd. W ten sposób Apache generuje nieograniczoną liczbę procesów, co oczywiście wpływa na zużycie pamięci RAM oraz zwiększa obciążenie procesora serwera. Nginx pozwala znacznie zmniejszyć to obciążenie. Powyższe połączenie serwerów WWW działa mniej więcej tak: na frontendzie (frontend) umieszczamy Nginx, który odbiera wszystkie przychodzące połączenia od agentów użytkowników odwiedzających Twoją stronę. Następnie, jeśli żądany jest statyczny zasób, taki jak strony HTML, zdjęcia czy udostępniony plik, Nginx obsługuje to żądanie samodzielnie i z maksymalną szybkością zwraca je klientowi. Jeśli natomiast wymagana jest obsługa jakiegoś skryptu PHP, Nginx przechwytuje żądanie klienta i przekazuje je do Apache (backend), który za pomocą swojego mod_php obsługuje skrypt i zwraca gotowe dane do Nginxa. W tym modelu liczba uruchomionych procesów Apache nie rośnie (w takim połączeniu, jak rozumiem, Apache ma tylko jedno połączenie z 127.0.0.1, na którym przyjmuje żądania od Nginxa). Mówiąc jeszcze prościej, Nginx to lekki interfejs między klientem a głównym, potężnym serwerem WWW, który zapobiega tworzeniu się wielu procesów Apache, oszczędzając tym samym cenną pamięć RAM. Teraz o konfiguracji. Ponieważ nie używam Debiana ani innych dystrybucji opartych na Ubuntu, opiszę proces instalacji i konfiguracji w ramach Arch Linux.
sudo pacman -S nginx
Po instalacji Nginx należy skonfigurować (prawdopodobnie już go masz) Apache. Otwieramy plik konfiguracyjny:
sudo nano -w /etc/httpd/conf/httpd.conf
Wyszukujemy linię
ServerRoot "/etc/httpd" Listen 80
i zmieniamy ją na 8080 (domyślnie Apache nasłuchuje na głównym porcie 80). Teraz Apache będzie oczekiwał na połączenia na porcie 8080, na który Nginx będzie przekazywał żądania do przetwarzania skryptów. W zasadzie z konfiguracją Apache mamy skończone, przynajmniej ja nic więcej tam nie zmieniałem. Teraz przejdźmy do Nginx:
sudo nano -w /etc/nginx/conf/nginx.conf
Będzie trzeba odkomentować niektóre linie. W pierwszej z nich odkomentowujemy dyrektywę „user” i wpisujemy tam swoją nazwę użytkownika, najczęściej jest to http. Następnie określimy, gdzie Nginx będzie zapisywać logi błędów:
error_log /var/log/httpd/error.log notice;
Następnie, jeśli chcemy użyć awstats do obliczania statystyk odwiedzin, odkomentowujemy to:
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
Poniżej znajdują się ustawienia zaczerpnięte z jakiegoś zaufanego źródła, przynajmniej dopóki nie zagłębiałem się w ich szczegóły
Kompresję gzip wyłączyłem, choć wszyscy ją zalecają, u mnie po jej włączeniu dysk zaczął szaleńczo pracować, więc postanowiłem ją wyłączyć. Teraz konfiguracja samego serwera: Konfigurujemy Nginx do nasłuchiwania na porcie 80. Chciałbym zwrócić uwagę, że jeśli w konfiguracji Apache ustawiłeś nasłuchiwanie na 127.0.0.1:8080, to tutaj również musisz podać nie listen 80, ale listen 127.0.0.1:80
server {
listen 80;
server_name syslinux.ru www.syslinux.ru;
charset utf-8;
access_log /var/log/httpd/host.access.log main;
Ta linia to ścieżka do pliku dziennika, do którego będą zapisywane informacje o hostach łączących się z nginx. W każdym miejscu, gdzie czytałem o konfiguracji nginx, wszyscy próbowali uruchomić statystyki za pomocą dodatkowych modułów, ale w tym przypadku, jeśli masz już działający awstats na Apache, wystarczy wskazać w ustawieniach awstats nowy plik dziennika (w tym przypadku host.access.log) do zbierania statystyk. Linii location nie zmieniamy.
location / {
Następnie szukamy linii proxy:
proxy_pass http://127.0.0.1:8080/;
Tutaj podajemy adres i port, na które mają być przekazywane żądania; ten port jest nasłuchiwany przez Apache, co jest nam właśnie potrzebne. Kolejna ważna linia to root, czyli lokalizacja plików serwera względem systemu plików; u mnie wygląda to tak:
root /srv/http;
Następnie restartujemy Apache
sudo /etc/rc.d/httpd restart
i próbujemy uruchomić nginx:
sudo /etc/rc.d/nginx start
ссылка на статью
