Felhasználói eszközök

Eszközök a webhelyen


oktatas:linux:webszerver:apache_php-fpm

< Webszerver

PHP-FPM

  • Szerző: Sallai András
  • Copyright © Sallai András, 2018
  • Licenc: GNU Free Documentation License 1.3

A PHP-FPM

Az FPM a FastCGI Process Manager rövidítése. Segítségével egyes könyvtárakon a PHP scriptek különböző felhasználók nevében futtathatók. Ezt szeretjük, mert nagyban növeli a weboldalak biztonságát. Ugyanakkor a gyorsabb futást is eredményez, mivel a PHP értelmező a memóriában marad, nincs újra és újra betöltés, mint egy szimpla CGI esetén.

A PHP-FPM segítségével önálló medencéket hozunk létre, amelyeket egy adott könyvtárhoz, és egy adott felhasználóhoz köthetünk. Minden újabb könyvtárhoz egy új medencét (pool) kell létrehoznunk. A mi döntésünk, hogy egy könyvtárhoz, vagy egy külön virtuális webhelyhez (VirtualHosthoz) hozunk létre medencét.

A parancsok elején a „#” jel, annyit jelent, hogy rendszergazdaként (rootként) kell futtatni.

Az alábbi leírásban egy Debian 9-en mutatjuk be a beállításokat, a 000-default webhelyen. A beállítás természetesen bármely virtuális webhely, bármely könyvtára is beállítható. Az itt beállított könyvtár egy „kek” alkönyvtár, és egy 9000-es portot foglalunk le számára. A példában feltételezzük, hogy a szerver IPv4 címe:

  • 192.168.10.2

Telepítés

Szükségünk van az Apache2 és a PHP-FPM csomagra. Telepítés Debian 9 alatt:

# apt install apache2 php-fpm

Ilyenkor a php7.0 csomag nem szükséges.

Beállítások

A PHP-FPM alapértelmezetten egy www-data nevű felhasználóhoz tartalmaz egy medencét, de ezt mi most nem használjuk. Helyette egy „kek” nevű felhasználóhoz egy „kek” nevű medencét fogunk használni.

Fel kell vennünk a felhasználót:

# mkdir /srv/www
# groupadd kek
# useradd -d /srv/www/kek -c "PHP user" -m -s /bin/false -g kek kek

Medence létrehozása:

# nano /etc/php/7.0/fpm/pool.d/kek.conf

A fájl tartalma:

[kek]
listen = 127.0.0.1:9000
user = kek
group = kek
pm = dynamic
pm.max_children = 5
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.start_servers = 2

A fenti medence példa egy minimális beállítást tartalmaz. Az /etc/php/7.0/fpm/pool.d/www.conf ennél több mintával és magyarázattal szolgálhat számunka.

Másoljuk a VirtualHost direktíva végére az Alias és a Directory bejegyzéseket, a kívánt virtuális webhelyen (VirtualHost). Mi ehhez most a 000-default.conf-ot használjuk.

# nano /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
        ...
        Alias /kek /srv/www/kek/htdocs
        <Directory /srv/www/kek/htdocs>
            Require all granted
            <FilesMatch "\.php$">
                SetHandler "proxy:fcgi://127.0.0.1:9000"
            </FilesMatch>
        </Directory>
</VirtualHost>

Teszteléshez hozzunk létre egy egyszerű PHP weblapot:

# mkdir /srv/www/kek/htdocs/
# nano /srv/www/kek/htdocs/index.php

Tartalma:

<?php
  phpinfo();

Engedélyezzük a proxy_fcgi apache modult:

# a2enmod proxy_fcgi

Indítsuk újra a PHP-FPM-et és az Apache-ot:

# systemctl restart apache2 php7.0-fpm

Hiba esetén

Gyakran előfordul a konfigurációs fájlban elírás, ami az újraindításkor azonnal jelentkezik. A naplóállományok segítenek a probléma megtalálásában.

Hiba esetén kövessük a /var/log/syslog utolsó sorait:

# tail /var/log/syslog

Esetleg így:

# tail -f /var/log/syslog

Ellenőrzés

Ellenőrzéshez, nézzük meg milyen folyamatok futnak:

# ps axf

A kimenet ehhez hasonló lesz:

 8366 ?        Ss     0:00 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.co
 8369 ?        S      0:00  \_ php-fpm: pool kek
 8370 ?        S      0:00  \_ php-fpm: pool kek
 8371 ?        S      0:00  \_ php-fpm: pool www
 8372 ?        S      0:00  \_ php-fpm: pool www
 8381 ?        Ss     0:00 /usr/sbin/apache2 -k start
 8382 ?        Sl     0:00  \_ /usr/sbin/apache2 -k start
 8383 ?        Sl     0:00  \_ /usr/sbin/apache2 -k start

Esetleg a felhasználókat is lekérdezhetjük:

# ps axfu
root      7185  0.1  2.5 222580 26164 ?        Ss   17:26   0:00 php-fpm: maste
kek       7194  0.0  0.6 222572  6240 ?        S    17:26   0:00  \_ php-fpm: p
kek       7195  0.0  0.6 222572  6240 ?        S    17:26   0:00  \_ php-fpm: p
www-data  7196  0.0  0.6 222572  6240 ?        S    17:26   0:00  \_ php-fpm: p
www-data  7197  0.0  0.6 222572  6240 ?        S    17:26   0:00  \_ php-fpm: p
root      7198  0.0  0.4  75608  4360 ?        Ss   17:26   0:00 /usr/sbin/apac
www-data  7199  0.0  0.3 364768  4052 ?        Sl   17:26   0:00  \_ /usr/sbin/
www-data  7200  0.0  0.3 364768  4052 ?        Sl   17:26   0:00  \_ /usr/sbin/

A kimenetben láthatjuk, hogy az FPM egy két medencét futtat. Az egyik a www, a másik kek. A www medence a www-data nevében, fut a kek medence a kek felhasználó nevében. A „kek” név helyére helyettesítsük be saját domain nevünket, vagy könyvtárnevünket.

Vizsgáljuk meg, hogy a 9000-es porotn figyel-e a PHP-FTPM:

# ss -lt4
State       Recv-Q Send-Q Local Address:Port                 Peer Address:Port                
LISTEN      0      128       *:ssh                     *:*                    
LISTEN      0      128    127.0.0.1:9000                    *:*                    
LISTEN      0      128       *:http                    *:*  

A Debian 9.4 hibája miatt lásd még a következő fejezetet.

Egy böngészőben írjuk be a szerverünk IP címét (pl. 192.168.10.2), majd a „kek” nevű könyvtárat:

http://192.168.10.2/kek/

A weboldal kimenet ehhez hasonló kell legyen:

Server API FPM/FastCGI
Virtual Directory Support disabled
Configuration File (php.ini) Path /etc/php/7.0/fpm
Loaded Configuration File /etc/php/7.0/fpm/php.ini
Scan this dir for additional .ini files /etc/php/7.0/fpm/conf.d

A kimeneteben jól látszik, hogy a FPM/FastCGI módban fut a könyvtár. A weboldalon keressünk még rá a „user” szóra, hogy megtudjuk milyen felhasználó nevében fut a weboldal. Esetünkben ott is a „kek” felhasználó kell szerepeljen.

Megjegyzés a Debian 9.4-hez

A Debian 9.4 verzióban az apache nem hallgatózik IPv4-en csak IPv6-on. Ha ez a hiba fenn áll, szerkesszük a ports.conf állományt:

# nano /etc/apache2/ports.conf

A Listen *:80 sort javítsuk így:

Listen 0.0.0.0:80

Indítsuk újra az apache-ot:

systemctl restart apache2

Ellenőrzés:

# ss -lt4

Ha szükségünk van IPv6-ra is, akkor két sort vegyünk fel:

Listen 0.0.0.0:80
Listen [::]:80

Megjegyzés

A PHP-FPM mellett állítólag nem használható a .htaccess. Ezt egyelőre nem ellenőriztem.

Források

oktatas/linux/webszerver/apache_php-fpm.txt · Utolsó módosítás: 2019/08/16 22:12 szerkesztette: admin