Setup php-fpm 7 with Apache on Debian 9 Stretch
These are steps to install php-fpm7.0 on a Debian 9 Stretch server. php-fpm allows for faster processing of PHP documents while using less memory than Apache2 with standard php7.0. This means you can run faster websites with less resource use.
- VPS - Debian 9.2
- Apache 2.4
- Memory: 1GB
Set up apache2
apt-get update apt-get install apache2 php7.0
Test apache2 with phpinfo
rm /var/www/html/index.html echo "<?php phpinfo(); ?>" > /var/www/html/index.php
Note:Access your server, note the Server API
apt-get install php-fpm
Change listen address for php-fpm
vim /etc/php/7.0/fpm/pool.d/www.conf Line 36 should be changed to this: listen = 127.0.0.1:9000
Add PHP handler to virtualhost or apache2.conf
<FilesMatch "\.php$"> SetHandler "proxy:fcgi://127.0.0.1:9000/" </FilesMatch>
Note: this tells Apache (global) or a specific virtualhost (per host) to use php-fpm depending on where you put it.
Restart apache and test
service apache2 restart service php7.0-fpm restart
Check your server's phpinfo for Server API - it should be "FastCGI" now
Speed and Performance
I tested the speed using Pingdom and Webpagetest before and after php-fpm installation on my test server that was under 0 load. Running my test Wordpress website averaged 2.1 seconds load time before php-fpm, and 1.3 seconds after. With MySQL, 4x php-fpm7.0 processes, and 4x apache2 prefork processes I was running at ~300MB real memory usage, with my buffers and cache filling up 600MB.
- Tune php-fpm's pool.d/www.conf file for more or less children depending on your resources
- Switch to Apache Worker MPM instead of prefork. This only works on some sites, but it allows you to disable mod_php and use php-fpm with threaded Apache2 children.