Install nginx server and configure a website

Install nginx server and configure a website

In this toturial you will learn how to install and configure nginx server and run a website on virtual host. According to the nginx website, virtual hosts are called Server Blocks on the nginx.
Install nginx on the ubuntu server

sudo apt-get install nginx

Start nginx server

sudo service nginx start

Install php-fpm which is used for the communication with nginx and php.

sudo apt-get install php5-fpm

You should edit and fix some lines in php.ini

sudo nano /etc/php5/fpm/php.ini

The commands are

old: expose_php = On
new: expose_php = Off
old: memory_limit = 128M
new: memory_limit = 512M
old: error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
new: error_reporting = E_ERROR | E_WARNING | E_PARSE | E_NOTICE
old: display_errors = Off
new: display_errors = On
old: post_max_size = 8M
new: post_max_size = 64M
old: ;cgi.fix_pathinfo=1
new: cgi.fix_pathinfo=0
old: short_open_tag = Off
new: short_open_tag = On

Change the following line, if it is different

sudo nano /etc/php5/fpm/pool.d/www.conf
listen = /var/run/php5-fpm.sock

Restart php-fpm

sudo service php5-fpm restart

Create a folder for nginx project

mkdir /var/www/

chnage the ownership of that project folder

sudo chown -R zalam /var/www/

Set permissions for that folder

sudo chmod 755 /var/www/

Create a file inside that project folder

sudo nano /var/www/

Copy the default ngnix block configuration for this project

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/

Edit this configuration file

sudo nano /etc/nginx/sites-available/

Replace the code below and with your domain.

server {
    listen   80; ## listen for ipv4; this line is default and implied
    #listen   [::]:80 default ipv6only=on; ## listen for ipv6
    index index.php index.html index.htm;
    # Make site accessible from http://localhost/
    # You can specify another sub domain aswell.
    # server_name;
    root /var/www/nginx_testing;
#   access_log "/var/logs/nginx_access_log";
#   error_log "/var/logs/nginx_error_log";
    # enforce www (exclude certain subdomains)
#   if ($host !~* ^(www|subdomain))
#   {
#       rewrite ^/(.*)$ $scheme://www.$host/$1 permanent;
#   }
    # enforce NO www
#   if ($host ~* ^www\.(.*))
#   {
#       set $host_without_www $1;
#       rewrite ^/(.*)$ $scheme://$host_without_www/$1 permanent;
#   }
    # set the expiry of following extensions
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$
        #expires max;
        expires 1y;
        log_not_found off;
        add_header Pragma public;
        add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    location ~ ^/(.*\.(ac3|avi|bmp|bz2|css|cue|dat|doc|docx|dts|exe|flv|gif|gz|htm|html|ico|img|iso|jpeg|jpg|js|mkv|mp3|mp4|mpeg|mpg|ogg|pdf|png|ppt|pptx|qt|rar|rm|swf|tar|tgz|txt|wav|xls|xlsx|zip|ttf|eot|svg|woff))$ {
        try_files $uri @fallback;
    # This block will disbale .htacess
    location ~ /\.ht {
        deny all;
    location / {
        try_files $uri $uri/ /index.php?u=$request_uri;
    location ~ \.php$
        fastcgi_pass unix:/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/nginx_testing$fastcgi_script_name;
        include fastcgi_params;
    # Always place these at the bottom of "server" block.
    error_page 404 /error_404.html;
    error_page 500 502 503 504 /error_5xx.html;
    location = /error_5xx.html {
        root  /var/www/nginx_testing;

Now enable the available block by executing this command

sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/

Restart the server to see the changes

sudo service nginx restart

If you get a error “Your PHP installation appears to be missing the MySQL extension which is required by WordPress.”
Remove php-mysql and install it again.

apt-get remove php5-mysql
apt-get install php5-mysql

Your website should working perfectly with nginx server.

Share this post

Leave a Reply

Your email address will not be published. Required fields are marked *