This is an old revision of the document!
Table of Contents
Apache Web Server with mpm_event, mod_proxy_fcgi, php-fpm and HTTP/2
When installing a web server, there are certain chances that you will use webapplications which depend on PHP. Unfortunately php (7) is not thread safe. This means when using Apache, you'll have to use mpm_prefork, which is slow when there are a lot of conections, uses a lot of memory and only partially supports HTTP/2 (As it seems in newer versions of apache it's not supported at all). Therefore, to use mpm_event with php, we need to use mod_proxy_fcgi (otherwise, php will be run directly by apache, which is a problem with mpm_event, since it uses threads). The overhead of running php outside of apache seems to be negligible. HTTP/2 offers huge performance improvements for clients, so we want it! The manual is written for Debian Stretch (Debian Version 9).
Enable php-fpm, mod_proxy_fcgi and mpm_event
So let's go:
If previously default mod-php was installed, remove it:
aptitude purge libapache2-mod-php
Then install php-fpm,activate the proxy_fcgi module, enable the php config which sets the proper php handler and enable mpm_event:
aptitude install php-fpm a2enmod proxy_fcgi a2enconf php7.0-fpm a2dismod mpm_prefork a2enmod mpm_event
Then restart apache
systemctl restart apache2
For further information, see https://wiki.apache.org/httpd/PHP-FPM especially about ulimit and future issues if too many connection are opened. Take a look at the caveeats! Don't allow document upload into document root! Instead, let the application put uploads for example into /var/www/<appdir> .
Enable HTTP/2 support
Enable HTTP/2 modules:
a2enmod http2
Create file /etc/apache2/mods-enabled/http2.conf
<IfModule http2_module> #The preference order of protocols. # h2c is http/2 without encryption. Protocols h2 h2c http/1.1 #maybe can make initiazion of http/2 connection faster. Not a necessary parameter H2Direct on </IfModule>
Activate .htaccess files
The default setup of the apache package will not use the .htaccess files (they are not very efficient). Most probably your php applications will use them, so to activate them, edit /etc/apache2/apache2.conf, and activate “allowOverride” in following config part:
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>