CentOS – Install Nginx And PHP-FPM using yum
In this article, I’m going to show you how to install Nginx with PHP-FPM via yum on CentOS (actually, steps are similar on another operating sytems). Before starting to install Nginx and PHP-FPM, you must uninstall all previous Apache and PHP related RPMs installed on your system or you’ll have to disable Apache or httpd on your system. Login as root and type the following command
yum remove httpd* php*
1.Enabling Additional Repositories
By default, php-fpm is not available from the official CentOS repositories, but from the Remi RPM repository which itself depends on the EPEL repository; we can enable both repositories as follows:
yum install yum-priorities -y rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
2.Installing Nginx
Type the following command
yum install nginx
If you want to run nginx by default when the system boots, type the following command
chkconfig --level 345 nginx on
To start Nginx for the first time, type the following command
/etc/init.d/nginx start
3.Installing PHP-FPM
Type the following command
yum --enablerepo=remi install php php-fpm
If you want to run php-fpm by default when the system boots, type the following command
chkconfig --level 345 php-fpm on
PHP was installed with only core modules. It’s very likely that additional modules will be desired, such as MySQL, XML, GD, etc. Type the following command
yum --enablerepo=remi install php-gd php-mysql php-mbstring php-xml php-mcrypt
To start PHP-FPM for the first time, type the following command
/etc/init.d/php-fpm restart
4.Configure PHP-FPM and Nginx working together
The configuration file for Nginx is located at /etc/nginx/nginx.conf. To edit nginx.conf type the following command
vi /etc/nginx/nginx.conf
Uncomment and edit as follows
... location / { root /usr/share/nginx/html; index index.html index.htm index.php; } ... location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } ...
Restart Nginx to reload new configuration, enter
/etc/init.d/nginx reload
Now create the following PHP file in the document root
vi /usr/share/nginx/html/info.php
Now you can access your first nginx host at http://localhost to see result of php code you put in
5. Nginx Virtual Hosting Configuration
Your sample setup
IP: 192.168.1.1
Domain: yoursite.loc
Hosted at: /home/www/yoursite.loc
Type the following command to create user called www
useradd www
Create necessary directories
mkdir -p /home/www/yoursite.loc/public_html mkdir -p /home/www/yoursite.loc/log chown -R www.www /home/www/ chmod 755 /home/www/
Creating virtual host config file
cd /etc/nginx/conf.d/ cp virtual.conf www.conf
Open www.conf, enter
vi /etc/nginx/conf.d/www.conf
Append configuration as follows:
server { server_name yoursite.loc; root /home/www/yoursite.loc/public_html; access_log /home/www/yoursite.loc/log/yoursite.loc-access.log; error_log /home/www/yoursite.loc/log/yoursite.loc-error.log; location / { index index.html index.htm index.php; } location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
You can also check the current status as well as the configuration syntax:
/etc/init.d/nginx configtest
Sample outputs
the configuration file /etc/nginx/nginx.conf syntax is ok configuration file /etc/nginx/nginx.conf test is successful
Now edit /etc/php-fpm.d/www.conf to change the users who own the php-fpm processes to www, enter
vi /etc/php-fpm.d/www.conf
Find “group of processes” and edit as follows:
; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. ; RPM: apache Choosed to be able to access some dir as httpd user = www ; RPM: Keep a group allowed to write in log dir. group = www
Finally restart nginx
/etc/init.d/nginx restart /etc/init.d/php-fpm restart