Setup php-fpm 7 with Apache on Debian 9 Stretch

From ETCwiki
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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.


Written: 1-16-2018


  • 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

Install php-fpm

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.

Enable php-fpm

a2enmod proxy_fcgi

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.

More speed

  • 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.

External Links