PHP-FPM (FastCGI Process Manager) je alternativou k FastCGI implementaci PHP s některými dalšími funkcemi užitečnými pro weby s vysokou návštěvností. Je to preferovaná metoda zpracování stránek PHP pomocí NGINX a je rychlejší než tradiční metody založené na CGI, jako je SUPHP nebo mod_php
pro spuštění PHP skriptu.
Hlavní výhodou použití PHP-FPM je to, že využívá podstatně méně paměti a CPU ve srovnání s jakýmikoli jinými metodami běhu PHP. Primárním důvodem je to, že démonizuje PHP, čímž jej transformuje na proces na pozadí a zároveň poskytuje skript CLI pro správu požadavků PHP.
Předpoklady konfigurace PHP-FPM NGINX
- Můžete otevřít relaci SSH ve vašem systému Ubuntu 18.04 pomocí uživatele root nebo uživatele s povoleným sudo.
- V systému Ubuntu 18.04 jste již nainstalovali NGINX a PHP.
Konfigurační kroky NGINX PHP-FPM
- Nainstalujte PHP-FPM
- Nakonfigurujte fond PHP-FPM
- Nakonfigurujte NGINX pro PHP-FPM
- Otestujte konfiguraci NGINX PHP-FPM
1. Nainstalujte PHP-FPM
Nginx neví, jak spustit vlastní skript PHP. Pro efektivní správu PHP skriptů potřebuje modul PHP, jako je PHP-FPM. PHP-FPM naproti tomu běží mimo prostředí NGINX vytvářením vlastního procesu. Když tedy uživatel požaduje stránku PHP, server nginx předá požadavek službě PHP-FPM pomocí FastCGI.
Instalace php-fpm v Ubuntu 18.04 závisí na PHP a jeho verzi. Než budete pokračovat s instalací FPM na váš server, zkontrolujte dokumentaci nainstalovaného PHP. Za předpokladu, že jste již nainstalovali nejnovější PHP 7.3, můžete FPM nainstalovat pomocí následujícího příkazu apt-get.
# apt-get install php7.3-fpm
Služba FPM se spustí automaticky po dokončení instalace. Můžete to ověřit pomocí následujícího příkazu systemd:
# systemctl status php7.3-fpm
● php7.3-fpm.service - The PHP 7.3 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.3-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2019-02-17 06:29:31 UTC; 30s ago
Docs: man:php-fpm7.3(8)
Main PID: 32210 (php-fpm7.3)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 1152)
CGroup: /system.slice/php7.3-fpm.service
├─32210 php-fpm: master process (/etc/php/7.3/fpm/php-fpm.conf)
├─32235 php-fpm: pool www
└─32236 php-fpm: pool www
2. Nakonfigurujte fond PHP-FPM
Služba php-fpm vytvoří výchozí fond, jehož konfiguraci (www.conf) naleznete v /etc/php/7.3/fpm/pool.d
složku. Výchozí bazén si můžete přizpůsobit podle svých požadavků. Je však standardní praxí vytvářet samostatné fondy, abyste měli lepší kontrolu nad přidělováním zdrojů jednotlivým procesům FPM.
Segregace fondu FPM jim navíc umožní fungovat nezávisle vytvořením vlastního hlavního procesu. To znamená, že každá php aplikace může být konfigurována s vlastním nastavením mezipaměti pomocí PHP-FPM. Změna konfigurace jednoho fondu nevyžaduje spouštění nebo zastavování zbývajících fondů FPM.
Pojďme vytvořit fond FPM pro efektivní provozování PHP aplikace prostřednictvím samostatného uživatele. Nejprve vytvořte nového uživatele, který bude mít výhradní práva k tomuto fondu:
# groupadd wordpress_user
# useradd -g wordpress_user wordpress_user
Nyní přejděte do konfiguračního adresáře FPM a vytvořte konfigurační soubor pomocí vašeho oblíbeného textového editoru, jako je vi:
# cd /etc/php/7.3/fpm/pool.d
# vi wordpress_pool.conf
[wordpress_site]
user = wordpress_user
group = wordpress_user
listen = /var/run/php7.2-fpm-wordpress-site.sock
listen.owner = www-data
listen.group = www-data
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = off
; Choose how the process manager will control the number of child processes.
pm = dynamic
pm.max_children = 75
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.process_idle_timeout = 10s
Výše uvedené možnosti konfigurace FPM a jejich hodnoty jsou popsány níže.
- [wordpress_site] :Název fondu a musí být jedinečný pro všechny názvy fondu.
- uživatel a skupina :Uživatel a skupina, pod kterými bude fond běžet.
- poslouchejte :Název souboru soketu pro tento fond.
- vlastník naslouchat a skupina naslouchat :Musí odpovídat uživateli a skupině, na které běží NGINX. V našem případě se jedná o www-data.
- php_admin_value :Umožňuje nastavit vlastní konfigurační hodnoty php.
- php_admin_flag :Umožňuje nastavit booleovské příznaky PHP.
- odpoledne :Nastavení správce procesů a hodnota je Dynamický znamená, že počet podřízených procesů je nastaven dynamicky na základě následujících direktiv.
- pm.max_children :Maximální počet dětí, které mohou být současně naživu.
- pm.start_servers :Počet dětí vytvořených při spuštění.
- pm.min_spare_servers :Minimální počet dětí v „nečinném“ stavu (čekající na zpracování). Pokud je počet nečinných procesů menší než tento počet, vytvoří se nějaké potomky.
- pm.max_spare_servers :Maximální počet dětí ve stavu nečinnosti (čekající na zpracování). Pokud je počet nečinných procesů větší než tento počet, některé děti budou zabity.
- pm.process_idle_timeout :Požadovaný maximální počet procesů nečinného serveru. Používá se pouze v případě, že je hodnota pm nastavena na dynamickou.
Kromě výše uvedených nastavení je také možné předat několik systémových proměnných prostředí do služby php-fpm pomocí něčeho jako env['PHP_FOO'] = $bar
.
Například přidáním následujících možností do výše uvedeného konfiguračního souboru nastavíte název hostitele a umístění dočasné složky na prostředí PHP.
...
...
env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
...
...
Také nastavení správců procesů ve výše uvedeném konfiguračním souboru fondu jsou nastavena na dynamická. Vyberte nastavení, které nejlépe vyhovuje vašim požadavkům.
Další možnosti konfigurace pro správce procesů jsou:
Jakmile dokončíte vytváření výše uvedeného konfiguračního souboru, restartujte službu fpm a použijte nová nastavení:
# systemctl start php7.3-fpm
Okamžitě se vytvoří fond FPM, aby mohl obsluhovat stránky php. Nezapomeňte, že můžete vytvořit samostatnou službu systemd zadáním výše uvedeného konfiguračního souboru FPM, což vám umožní spustit/zastavit tento fond bez ovlivnění ostatních fondů.
3. Nakonfigurujte NGINX pro PHP-FPM
Nyní vytvořte blok serveru NGINX, který bude využívat výše uvedený fond FPM. Chcete-li to provést, upravte svůj konfigurační soubor NGINX a předejte cestu k souboru soketu fondu pomocí možnosti fastcgi_pass
uvnitř bloku umístění pro php.
server {
listen 80;
server_name example.journaldev.com;
root /var/www/html/wordpress;
access_log /var/log/nginx/example.journaldev.com-access.log;
error_log /var/log/nginx/example.journaldev.com-error.log error;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php7.2-fpm-wordpress-site.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
}
Blok serveru NGINX
Ujistěte se, že výše uvedené konfigurační nastavení je syntakticky správné a restartujte NGINX.
# nginx-t
# systemctl restart nginx
4. Otestujte konfiguraci PHP-FPM NGINX
Chcete-li otestovat, zda výše uvedený konfigurační soubor NGINX skutečně používá nově vytvořený fond FPM, vytvořte informační soubor php uvnitř webového kořenového adresáře. Použil jsem /var/www/html/wordpress
jako webový kořen ve výše uvedeném konfiguračním souboru NGINX. Upravte tuto hodnotu podle svého prostředí.
# cd /var/www/html/wordpress
# echo "<?php echo phpinfo();?>" > info.php
Jakmile skončíte s vytvářením informační stránky PHP, nasměrujte na ni svůj oblíbený webový prohlížeč.
Všimnete si, že hodnota $_SERVER['USER']
a $_SERVER['HOME']
proměnné ukazují na wordpress_user
a /home/wordpress_user
respektive, které jsme dříve nastavili v konfiguračním souboru FPM a tím potvrzujeme, že NGINX obsluhuje stránky php pomocí našeho požadovaného fondu FPM.
Testování NGINX PHP-FPM
Shrnutí
V tomto článku jsme se naučili, jak nainstalovat php-fpm a nakonfigurovat samostatné fondy pro různé uživatele a aplikace. Také jsme se naučili, jak nakonfigurovat blok serveru NGINX pro připojení ke službě PHP-FPM. PHP-FPM poskytuje spolehlivost, bezpečnost, škálovatelnost a rychlost spolu se spoustou možností ladění výkonu. Nyní můžete rozdělit výchozí fond PHP-FPM do více fondů zdrojů, které budou sloužit různým aplikacím. To nejen zvýší zabezpečení vašeho serveru, ale také vám umožní optimálně alokovat zdroje serveru!