Nginx is an open source web server for reverse proxying, caching, load balancing, media streaming, and other uses. It was initially created by Igor Sysoev in 1999 to solve the C10K problem which was about having network sockets handle a large number of clients simultaneously. Basically C10K means concurrently handling 10,000 connections. Nginx was built to be a fast, high performance server and is used by millions of websites and big name companies like Airbnb, Dropbox, Netflix, and Tumblr use it.

Nginx offers a different option than using Apache or other web servers and claims to be able to serve 10x more requests per server compared to Apache.

Additional Details

  • Nginx is a web server which can also be used as a reverse proxy, load balancer and HTTP cache.
  • It is one of the most popular web servers in use and is responsible for hosting some of the largest and highest-traffic sites on the internet.
  • It is proven to be lighter on resources than httpd/Apache.
  • Nginx is free and open-source software


Installation of Nginx on Ubuntu

Update the local package index and install Nginx from default repositories:

$ sudo apt-get update && sudo apt-get upgrade
$ sudo apt-get install nginx
$ sudo systemctl status nginx

Enable nginx on the firewall using ufw

sudo ufw allow 'Nginx HTTP'

Validate nginx is running:

systemctl status nginx

Installation of Nginx on CentOS 7

Add Nginx repository and install:

$ sudo yum install epel-release
$ sudo yum install nginx
$ sudo systemctl start nginx # will start the server

Key file locations for Debian based distributions (Ubuntu included)


  • This is where you will find the global configuration values, what user the nginx process runs as, how many workers it has etc.


  • As one nginx instance can run multiple sites with separate configurations this is the directory where you will have the separate configuration files. Usually there is a file named 'default', but any file in this directory that can be parsed by nginx is available.


  • This is the directory that holds the site configurations that are actually live (enabled), you should not move files here directly, rather sym-link the files from the sites-available directory. Making a linked file in this directory does not make it live, for that you need to restart nginx or have it reload the config. Usually done via systemd.


  • Default location for nginx logs.

More Information

Contributing to the Guide

This open source guide is curated by thousands of contributors. You can help by researching, writing and updating these articles. It is an easy and fun way to get started with contributing to open source.