Install Nginx CentOS 7

Stop apache if running:

# systemctl stop httpd

Install epel if not installed:

# yum install epel-release
# yum install nginx
# systemctl enable nginx
# systemctl start nginx

If you are running a firewall, run the following commands to allow HTTP and HTTPS traffic:

# firewall-cmd --permanent --zone=public --add-service=http 
# firewall-cmd --permanent --zone=public --add-service=https
# firewall-cmd --reload

Open in a web browser:

http://server_domain_name_or_IP/

Configure gzip compression:

# nano /etc/nginx/conf.d/gzip.conf
##
# `gzip` Settings
#
#
gzip on;
gzip_disable "msie6";

gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;

Restart:

# systemctl restart nginx

Configure default site block (replace domain with actual domain name):

# nano /etc/nginx/conf.d/default.conf
server {
    listen       80;
    server_name  domain.com;

    # note that these lines are originally from the "location /" block
    root   /home/domain/public_html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        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;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
   }
location ~* \.(jpg|jpeg|gif|png)$ {
expires 365d;
}

location ~* \.(pdf|css|html|js|swf)$ {
expires 2d;
}

}

Change apache listening port and any other “.conf” files for virtual domains to listen on port 8080:

# nano /etc/httpd/conf/httpd.conf
Listen 8080

Restart apache:

#systemctl restart httpd

Restart ngnix:

#systemctl restart nginx

Test gzip:

curl -H "Accept-Encoding: gzip" -I http://localhost/test.html
HTTP/1.1 200 OK
Server: nginx/1.10.2
Date: Fri, 15 Sep 2017 00:45:27 GMT
Content-Type: html
Last-Modified: Thu, 08 Jun 2017 16:46:42 GMT
Connection: keep-alive
Vary: Accept-Encoding
ETag: W/"59397f72-4ddf"
Content-Encoding: gzip

Install php handler

# yum install php php-mysql php-fpm

Configure the PHP Processor:

nano /etc/php.ini

Uncomment and set from 1 to 0:

cgi.fix_pathinfo=0

Next, open the php-fpm configuration file www.conf:

# nano /etc/php-fpm.d/www.conf

Find the line that specifies the listen parameter, and change it so it looks like the following:

/etc/php-php.d/www.conf 
listen = /var/run/php-fpm/php-fpm.sock

Next, find the lines that set the listen.owner and listen.group and uncomment them. They should look like this:

/etc/php-php.d/www.conf
listen.owner = nobody
listen.group = nobody

Lastly, find the lines that set the user and group and change their values from “apache” to “nginx”:

/etc/php-php.d/www.conf
user = nginx
group = nginx
Then save and quit.

Now, we just need to start our PHP processor by typing:

# systemctl start php-fpm

This will implement the change that we made.

Next, enable php-fpm to start on boot:

# systemctl enable php-fpm

Restart Nginx to make the necessary changes:

# systemctl restart nginx

Test PHP Processing on your Web Server

Create an info php in the root directory:

# nano /home/domain/public_html/info.php

Open in a web browser:
http://domain.com/info.php

This page basically gives you information about your server from the perspective of PHP. It is useful for debugging and to ensure that your settings are being applied correctly.

If this was successful, then your PHP is working as expected.