Share this page:

Nginx Basics

Nginx is the second most popular open source web server behind Apache. Nginx is open source, but some add-ons are available as part of a paid subscription. According to, it is used in approximately 23% of all websites.

Nginx uses an asynchronous event processing model instead of a thread based model. Apache needs one thread per connection, whereas Nginx uses one thread per CPU, and each Nginx thread can handle many connections.  Nginx tends to use less memory than Apache, and performs very well under a heavy load.

Before installing Nginx, make sure that your server is up to date.

sudo apt-get update
sudo apt-get upgrade

Now install and start Nginx:

sudo apt-get install nginx
sudo service nginx start

Visit your server's IP address in your browser, and you should see a sample page like this:

Nginx sample page

Configuration files

The configuration files for Nginx are stored in /etc/nginx.  There are some global settings in /etc/nginx/nginx.conf that control the server as a whole, and /etc/nginx/sites-available contains configuration files for individual virtual servers.  

Virtual servers are a lot like virtual hosts in Apache; they are a groups of configuration options that describe how the server should handle traffic for different sites.

Settings are grouped into contexts.  Some contexts can contain other contexts, creating a hierarchy. The http context contains settings that control the HTTP protocol. Virtual server settings are stored in server contexts, which are contained in the http context.  Locations are contexts that store settings for URLs, and they are contained within a server context.

http {
    server {
        # Server configuration

        location /some_url {

    server {
        location /some_other_url {


Server contexts are usually stored in a seperate file than the http context, and the include directive is used to import code for virtual servers.  This line is used in the http context to include site-specific configuration files:

include /etc/nginx/sites-enabled/*


Nginx.conf contains server-wide options. The first options set Nginx's username and the number of worker processes:

user www-data;
worker_processes 4;

The number of worker processes should be set to the number of CPU cores in the server. There's no benefit to creating additional processes.

The events context contains a setting named worker_connections which determines how many simultaneous connections Nginx will attempt to handle.  If you increase this number, make sure that you also increase the maximum number of files that the OS can open with ulimit.

events {
    worker_connections 768;
    # multi_accept on;

The http context contains settings for handling TCP connections, logging and content compression with gzip.

Extra configuration files can be stored in /etc/nginx/conf.d/. This line of code ensures that as long as they have a .conf extension, they will be included in nginx.conf.

include /etc/nginx/conf.d/*.conf


More from this category: