Adding PHP support to Nginx.

Adding PHP support to Nginx.

In the last post, I show how to install and configure Nginx on CentOS. In this post, I will show you how to add PHP support to that installed Nginx web server.

There are two ways to add PHP support to Nginx: One by Using PHP-FastCGI and the other way is to use PHP-FPM. Using PHP-FPM is the simple way to add PHP support to Nginx and the way that i will demonstrate on this blog.

Enabling REMI###

First, we will need to add the REMI repository to the system. To do this we will download and install the remi-release rpm (notice that EPEL needs to be available or you will have dependency issues).

Download the remi-release rpm:

[root@webserver ~]# wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

Install the remi-release rpm:
`[root@webserver ~]#rpm -ivh remi-release-7.rpm

We are going to install yum-utils to use yum-config-manager on the system to enable the required repositories:

[root@webserver ~]# yum install yum-utils -y

Enable the repos:

[root@webserver ~]# yum-config-manager --enable remi

[root@webserver ~]# yum-config-manager --enable remi-php56

[root@webserver ~]# yum clean all

Installation and configuration###

Now we are going to install php-fmp y php-mysql from the previously enabled repositories:

`[root@webserver ~]# yum install php-fpm php-mysql

Now we are going to edit php.ini and change cgi.fix_pathinfo=1 to cgi.fix_pathinfo=0 . This change will be done to reduce the risk of PHP processing the wrong files that could lead to a security exploit.

[root@webserver ~]# vim /etc/php.ini

On that file search and replace cgi.fix_pathinfo=1 to cgi.fix_pathinfo=0. Verify that there is not a commentary (;) on the front of the line, this will invalidate the change that you just did.

Now we are going to modify: /etc/php-fpm.d/www.conf

[root@webserver ~]# vim /etc/php-fpm.d/www.conf

We are going to change :

listen = 127.0.0.1:9000

to :

listen = /var/run/php-fpm/php-fpm.sock

Now we are going to enable and start the php-fpm service:

[root@webserver ~]# systemctl enable php-fpm.service

[root@webserver ~]#systemctl start php-fpm

Check the status of the service:

[root@webserver ~]# systemctl status php-fpm
php-fpm.service - The PHP FastCGI Process Manager
   Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled)
   Active: active (running) since Thu 2015-04-02 17:37:57 EDT; 24s ago
 Main PID: 11619 (php-fpm)
   Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
   CGroup: /system.slice/php-fpm.service
           ├─11619 php-fpm: master process (/etc/php-fpm.conf)
           ├─11620 php-fpm: pool www
           ├─11621 php-fpm: pool www
           ├─11622 php-fpm: pool www
           ├─11623 php-fpm: pool www
           └─11624 php-fpm: pool www
 Apr 02 17:37:57 www.juliovillarreal.com systemd[1]: Started The PHP FastCGI Process Manager.

Configuring Nginx to process PHP pages###

At this point we have PHP installed on the server and runnig. The next step will be to add the PHP support to Nginx. In my case i will fo it to the virtual hosts entries by adding:


location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

After the change, restart the Nginx service and test that you could serve .php pages.

[root@webserver ~]# sudo systemctl restart nginx.service

Add to your virtual host directory a file and name it info.php with the next code:

[root@webserver ~]# vim info.php
<? phpinfo(); ?>

After this, you should be able to browse to this page and see all the PHP info from your server.