Monday 16 November 2015

PHP-FPM on Apache HTTPD (CentOS 7)

This basically guides you on implementing PHP-FPM on Apache HTTPD.
The following installation steps are all done on CentOS 7.
Previous version of CentOS might not work as previous Apache HTTPD's fast cgi mod are a bit, "challenging".

Specification:
CentOS 7+
Apache HTTPD 2.4+
PHP 5.6+ (Remi Repository)

(After fresh installation of CentOS)
Step 1, Update system, install Remi repository, install PHP and HTTPD
# yum update
# cd /tmp
# wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
# rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm
# yum install httpd httpd-devel
# yum install --enablerepo=remi, remi-php56 php php-devel php-fpm <any-extra-php-modules-you-need-example-php-mbstring>

Step 2, setup new directory
# cd /var/www/html
# mkdir php-fpm
# printf '<?php\n   phpinfo();' > php-fpm/index.php

Step 3, Add a new HTTPD configuration points to the new directory
(A configuration that assign all calls to the directory passes it to php-fpm, on a virtual host)
# vi /etc/httpd/conf.d/php-fpm.conf

# Config Content
<VirtualHost *:80>
    ServerName your-servername.com

    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/php-fpm/$1

    DocumentRoot /var/www/html/php-fpm
    <Directory /var/www/html/php-fpm>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog /var/log/httpd/fpm_error.log

    CustomLog /var/log/httpd/fpm_access.log combined
</VirtualHost>


Before proceeding, make sure you added rules to firewalld to allow access.
Step 4, Bring up PHP-FPM and HTTPD
(The steps below disables firewalld and selinux, remember it is important not to disable them on the production server)
# service firewalld stop
# setenforce 0
# service php-fpm start
# service httpd start

Now, access to your server, you will see the php-info, with php-fpm being active in the cgi-fcgi section.

If you want to begin your development on the directory, go on =)
But you might want to concern on the systemd-private-temp configuration if your site allow file uploads.
(CentOS 7 new feature, the "PrivateTemp" option that store in /usr/lib/systemd/system/php-fpm.service)

// Thoughts
It is so much easy on setting up PHP-FPM on CentOS 7 compare to previous CentOS. You need to install mod_fcgi, load it, pass it, very troublesome on virtual host, etc...
Totally a mess.

But it is easy on NGINX. Just around 4 lines and you are done.
I'm basically used to HTTPD, so I will try to stick with it.

NGINX was not that bad either.
It depends on what your site serves.

No comments:

Post a Comment