-
PHP-FPM dla Apache w CentOS i nie tylko
Nie chciałbym się zbytnio rozpisywać się o bezpieczeństwie usług hostingowych, ponieważ temat ten był niejednokrotnie poruszany. Wolałbym skupić się nad lepszym (wydajniejszym) rozwiązaniem niż FastCGI o zastosowaniu którego w przypadku serwera Apache, pisaliśmy jakiś czas temu.
Mam tu na myśli PHP-FPM (FastCGI Process Manager). Dostarcza on dokładniejszych logów błędów niż zwykłe FCGI oraz zapewnia większą wydajność / responsywność szczególnie w przypadku bardziej obciążonych strony. Więcej szczegółów tutaj. Czas przystąpić do instalacji i konfiguracji. Zakładam, że mamy zainstalowanego Apacha.yum install mod_fastcgi fcgi php-fpm
Następnie konfigurujemy php-fpm, poprzez edycję pliku www.conf.
vim /etc/php-fpm.d/www.conf
Poniżej przykładowa konfiguracja
[www]
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
user = apache
group = apache
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
Zamiast nasłuchiwania na porcie 9000, można zastosować sockety, co jest wydajniejszym rozwiązaniem np. „listen = /usr/nginx/socks/www”. Startujemy php-fpmservice php-fpm start
Pamiętajmy o wyłączeniu wrapera FCGI w pliku „/etc/httpd/conf.d/fastcgi.conf”, poprzez zmianę wpisu
FastCgiWrapper On
naFastCgiWrapper Off
. Następnie konfigurujemy vhost dla Apacha. Oto przykładowy:
DocumentRoot /www/nasza-strona.pl/html
ServerName nasza-strona.pl
ErrorLog logs/nasza-strona.pl-error_log
CustomLog logs/nasza-strona.pl-access_log commonAddHandler php-fpm .php
Action php-fpm /php-fpm
Alias /php-fpm /usr/sbin/php-fpm
FastCgiExternalServer /usr/sbin/php-fpm -host 127.0.0.1:9000Oczywiście następnie restartujemy, ale najpierw sprawdzamy, czy nie popełniliśmy jakiegoś błędu w konfiguracji.
httpd -t
service httpd restart
Dla przetestowania warto utworzyć sobie plik np. info.php i umieścić w „DocumentRoot”:
Jeśli wyświetliła się nam „słynna” strona diagnostyczno-informacyjna php a w polu „Server API” widnieje wpis „FPM/FastCGI”, to znaczy, że zrobiliśmy wszystko dobrze. W razie problemów, proszę pisać.