User Tools

Site Tools


linux_server_manuals:apache_http_2_php-fpm

This is an old revision of the document!


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>
You could leave a comment if you were logged in.
linux_server_manuals/apache_http_2_php-fpm.1517163006.txt.gz · Last modified: 2018/01/28 18:10 by ronney