A friend of mine told me once that the most fearful parachute jump is the second one )
Purpose
I have apache2 and php5 and I want to configure them differently for different virtual hosts to have a testing environment on hand.
The annoying problem I've recently faced was configuration of FPM for some virtual hosts among others.
If you want to enable it for the whole server, there is no any problem. But if you want to have php configured as apache module for each one except few, there is a couple of things that are simple but not obvious.
Foreword
- Apache2 + PHP5
Installation:
apt-get install apache2 apache2-doc apache2-utils apt-get install php5
- PHP-FPM - FastCGI Process Manager
About: http://php.net/manual/en/install.fpm.php
Installation:
Installation:
apt-get install libapache2-mod-fastcgi php5-fpm php5
- Versions
I'm using Debian Jessie. It is important because the version of the OS influences the version of the application. Both they influence default configuration and features of your build.
It's my initial configuration of the host that has to use FPM (FastCGI + PHP) /etc/apache2/sites-available/testfcgi.deb8s1.local.conf:
It's the crucial moment of the /etc/apache2/mods-available/php5.conf config (remember it):
- apache2 has the version 2.4.6-3
- php5-fpm has the version 5.5.1+dfsg-2
- php5 has the version 5.5.1+dfsg-2
To display version you can use the following command: apt-cache showpkg {PACKAGE}
Initial configuration
It's my configuration of the host that has to use PHP as Apache module (/etc/apache2/sites-available/testapache2.deb8s1.local.conf):
<VirtualHost *:80>
ServerAdmin igor@deb8s1.local
ServerName testapache2.deb8s1.local
ServerAlias www.testapache2.deb8s1.local
DocumentRoot /srv/www/igor/testapache2.deb8s1.local/public_html/
ErrorLog /srv/www/igor/testapache2.deb8s1.local/logs/error.log
CustomLog /srv/www/igor/testapache2.deb8s1.local/logs/access.log combined
</VirtualHost>
It's my initial configuration of the host that has to use FPM (FastCGI + PHP) /etc/apache2/sites-available/testfcgi.deb8s1.local.conf:
<VirtualHost *:80>
ServerAdmin igor@deb8s1.local
ServerName testfcgi.deb8s1.local
ServerAlias www.testfcgi.deb8s1.local
DocumentRoot /srv/www/igor/testfcgi.deb8s1.local/public_html/
ErrorLog /srv/www/igor/testfcgi.deb8s1.local/logs/error.log
CustomLog /srv/www/igor/testfcgi.deb8s1.local/logs/access.log combined
</VirtualHost>
It's the crucial moment of the /etc/apache2/mods-available/php5.conf config (remember it):
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
Let's check:
| wget -O- testapache2.deb8s1.local/phpinfo.php | grep 'Server API' | wget -O- testfcgi.deb8s1.local/phpinfo.php | grep 'Server API' |
![]() |
![]() |
Configure FPM for a certain host
It is required to enable following modules:
a2enmod actions alias fastcgi service apache2 restart
Then configure /etc/apache2/sites-available/testfcgi.deb8s1.local.conf
<VirtualHost *:80>
ServerAdmin igor@deb8s1.local
ServerName testfcgi.deb8s1.local
ServerAlias www.testfcgi.deb8s1.local
DocumentRoot /srv/www/igor/testfcgi.deb8s1.local/public_html/
ErrorLog /srv/www/igor/testfcgi.deb8s1.local/logs/error.log
CustomLog /srv/www/igor/testfcgi.deb8s1.local/logs/access.log combined
<IfModule mod_fastcgi.c>
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler php5-fcgi
</FilesMatch>
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock
<Location /php5-fcgi>
Require all granted
</Location>
</IfModule>
</VirtualHost>
Let's reload and check
service apache2 reload
| wget -O- testapache2.deb8s1.local/phpinfo.php | grep 'Server API' | wget -O- testfcgi.deb8s1.local/phpinfo.php | grep 'Server API' |
![]() |
![]() |
About
Now, I think that I should describe the things that have made troubles for me.
it seems, that if you have a handler configured in the config file of some module, you have to reload it absolutely the same way (I can be wrong):
/etc/apache2/mods-available/php5.conf
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
From /etc/apache2/sites-available/testfcgi.deb8s1.local.conf
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler php5-fcgi
</FilesMatch>
The second thing I faced was permission error. And the following fix was required:
<Location /php5-fcgi>
Require all granted
</Location>
It's strange, but during my struggle I haven't found any guide that mentions these two issues in relation with FCGI, and I had to read articles about SetHandler, Alias and Action directives on the Apache site.
Conclusion
My friends tell: 'Use Nginx' )
Sources
- A guide about FPM configuration - the most helpful.
- Apache2 - SetHandler
- Apache2 - Alias
- Apache2 - Action





No comments:
Post a Comment