Konfiguracja PHP-FPM w systemie Linux

Konfiguracja PHP-FPM w systemie Linux

Czytaj 7 minuta

Nie będziemy poruszać podstawowych ustawień samego serwera Nginx i jego funkcjonalności, zrobiliśmy to już w naszym poprzednim artykule. Należy jednak wziąć pod uwagę niektóre parametry.

Zdefiniuj i określ liczbę handlerów i liczbę połączeń na procesor. W tym celu w pliku /etc/nginx/nginx. conf określimy wartości:

worker_processes 1; worker_connections 1024;

Podstawową ideą przy wyborze tych wartości jest to, że liczba obsługiwanych klientów jest równa liczbie programów obsługi pomnożonej przez liczbę połączeń dla każdego procesora. W naszym przypadku jest to 1024 klientów. Aby uniknąć problemów z wejściem-wyjściem, należy postępować zgodnie z zasadą 1 procesora na rdzeń procesora. Liczbę rdzeni można określić poleceniem

cat /proc/cpuinfo | grep processor processor : 0

Mój procesor ma jeden rdzeń. Dlatego liczba procesorów wynosi jeden. Liczbę połączeń można dodać w zależności od potrzeb. Ten parametr jest już wybrany w praktyce.

Ze względów bezpieczeństwa można włączyć dyrektywę

server_tokens off

Z podręcznika: "Zezwala lub zabrania wydawania wersji Nginx w komunikatach o błędach i w polu "Serwer" w tytule odpowiedzi".

Dyrektywa ta jest dodawana do sekcji http/server/local pliku konfiguracyjnego.

Określmy rozmiar danych przesyłanych przez serwer:

client_max_body_size 20m; client_body_buffer_size 128k;

Dyrektywa ta jest dodawana do sekcji http/server/local pliku konfiguracyjnego.

Konfiguracja pamięci podręcznej dla plików statycznych. Ma to na celu zaoszczędzenie zasobów serwera i przepustowości. Wyłącz logowanie i ustaw datę wygaśnięcia nagłówka na 100 dni dla plików statycznych.

location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ { access_log off; log_not_found off; expires 360d; }

Aby wejść w interakcję z PHP-FPM, można określić gniazdo uniksowe. Aby to zrobić, musimy napisać w naszej konfiguracji halo:

# Pass PHP scripts to PHP-FPM location ~* \.php$ { fastcgi_index index.php; fastcgi_pass 127.0.0.1:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; }

Patrząc dalej, w ustawieniach PHP-FPM należy określić nasłuchiwanie na adresie IP i porcie określonym w naszej konfiguracji. Odbywa się to za pomocą dyrektywy nasłuchiwania w pliku konfiguracyjnym puli.

Ze względów bezpieczeństwa można uniemożliwić dostęp do ukrytych plików.

location ~ /\. { access_log off; log_not_found off; deny all; }

Samą konfigurację PHP-FPM można podzielić na 2 kroki: ustawienie parametrów globalnych, które odbywa się w pliku

/etc/php5/fpm/php-fpm.conf

oraz konfigurację puli. Konfiguracja puli jest określona w plikach katalogów

/etc/php5/fpm/pool.d/

Parametry globalne nie są tak interesujące i można o nich przeczytać w dokumentacji, ale główne parametry konfiguracji pul rozważymy.

Każda pula jest konfigurowana za pomocą osobnego pliku. Jeśli wykonasz polecenie

ls -l /etc/php5/fpm/pool. d/

zobaczymy, że system ma już plik konfiguracyjny dla puli www. Przyjrzyjmy się konfiguracji na jej przykładzie.

Ważnym punktem konfiguracji jest wybór liczby handlerów, które są używane do wykonywania skryptów PHP. Ich liczba musi być wybrana mądrze. Zbyt mała liczba handlerów nie pozwoli na sprawne i szybkie przetwarzanie żądań, natomiast zbyt duża ich liczba wyczerpie zasoby, których serwer potrzebuje do innych zadań. Liczba procesorów powinna być dobrana z uwzględnieniem tego, że nawet w szczycie żądań do serwera, wykorzystanie jego zasobów powinno pozostać w rozsądnych granicach i nie prowadzić do jego przeciążenia.

Przyjrzyjmy się teraz nieco plikowi konfiguracyjnemu i określmy następujące opcje. O tak, w pliku konfiguracyjnym linie zaczynające się od symbolu ";" są komentarzami i nie są uważane za dyrektywy.

Określ dynamiczny tryb tworzenia procesów, aby liczba uruchomionych procesów PHP-FPM zależała bezpośrednio od obciążenia serwera.

pm = dynamic

Ustaw maksymalną liczbę procesów potomnych.

pm.max_children = 6

Następnie należy określić liczbę procesów potomnych, które zostaną uruchomione zaraz po załadowaniu serwera. Domyślnie wartość ta wynosi 2. Można ją zwiększyć, jeśli pozwalają na to zasoby; ustawmy ją na 3.

pm.start_servers = 3

Należy również określić minimalną i maksymalną liczbę bezczynnych procesów. Ustawmy minimalną liczbę równą liczbie procesów uruchomionych podczas startu serwera. A maksymalną liczbę ustawimy na podstawie tego, że nie powinna przekraczać maksymalnej dozwolonej liczby procesów potomnych.

pm.min_spare_servers = 3 pm.max_spare_servers = 5

Wartości te zostały podane dla przykładu i wyjaśnienia. Jednak w każdej konkretnej sytuacji mogą się one różnić. Optymalne wartości zależą od możliwości serwera i dostępnych zasobów, liczby i złożoności kodu PHP, liczby zapytań i obciążenia serwera. Parametry te można uzyskać tylko poprzez praktyczne zastosowanie i testowanie utworzonej witryny.

Rozważmy teraz konkretne ustawienia.

Po pierwsze, skonfigurujemy rejestrowanie informacji o skryptach, które działają wolno. Informacje te będą przydatne w wyjaśnieniu przyczyn opóźnień w witrynie. Najpierw ustawimy próg czasowy, po którym wykonanie skryptu zostanie uznane za powolne.

request_slowlog_timeout = 10s

Jednostki czasu można określić w sekundach (s), minutach (m), godzinach (h) lub dniach (d). Określiliśmy czas 10 sekund.

Teraz określimy również nazwę pliku, do którego będą wysyłane informacje.

slowlog = /var/log/slowphp.log

Teraz ten plik może być badany w celu badania "powolnych" skryptów.

Jeśli chcesz uruchamiać skrypty w izolowanym środowisku lub środowisku chroot. Ta opcja jest zwykle używana do celów bezpieczeństwa. Aby włączyć tę funkcję, należy ustawić opcję chroot.

Podczas ustawiania tej opcji należy pamiętać, że spowoduje to zmiany w przetwarzaniu skryptów PHP.

Wszystkie ścieżki plików będą teraz wyświetlane względem określonego katalogu, a skrypty PHP nie będą mogły uzyskać dostępu do gniazd znajdujących się poza określonym katalogiem.

Aby utrzymywać wiele witryn, może być konieczne dodanie dodatkowych pul. Pozwala to skonfigurować różne ustawienia dla każdej witryny indywidualnie. Aby utworzyć dodatkową pulę, skopiuj nasz plik

/etc/php5/fpm/pool.d/www.conf

pod nową nazwą, na przykład

/etc/php5/fpm/pool.d/www2.conf

Otwórz nowy plik i zmień nazwę puli. Aby to zrobić, w górnej części pliku zmień linię [www] na [www2].

I zmień linię:

listen = /var/run/php5-fpm.sock

on

listen = /var/run/www2.sock

Jeśli chcemy, aby program obsługi nasłuchiwał na parze ip:port, dyrektywa listen będzie wyglądać następująco

listen = 127.0.0.1:9000

Następnie restartujemy usługę

/etc/init. d/php5-fpm restart

DedicServerIT