GNU/Linux >> Znalost Linux >  >> Linux

Jak nakonfigurovat PHP-FPM s NGINX

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:

  • Statické :Bude zachován pevný počet procesů PHP.
  • na vyžádání :Při spuštění se nevytvářejí žádné děti. Děti budou rozděleny, když server obdrží nové požadavky.

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!


Linux
  1. Jak nakonfigurovat Nginx pro práci s PHP přes PHP-FPM

  2. Jak nakonfigurovat origin Cloudflare SSL s Nginx

  3. Jak povolit Nginx s PHP-FPM na Plesk

  1. Jak nainstalovat PHP 7.4 s Nginx na Ubuntu 20.04

  2. Jak spustit více verzí PHP s Nginx na Ubuntu?

  3. Jak nainstalovat PHP-FPM s Apache na Ubuntu 20.04

  1. Jak nainstalovat WordPress s Nginx na CentOS 7

  2. Jak nakonfigurovat vzdálené protokolové servery s rsyslog?

  3. Jak nakonfigurovat Nginx pro spouštění PHP pomocí PHP-FPM