What is Nginx? How does it work? Explained

NGINX (Pronounced as Engine-X) is an open-source, lightweight, high-performance web server, and proxy server. Nginx is used as a reverse proxy server for HTTP, HTTPS, SMTP, IMAP, and POP3 protocols, on the other hand, it is also used for server load balancing and HTTP Cache. Nginx accelerates content and application delivery, improves security, and facilitates availability, and scalability for the busiest websites on the Internet.

In layman’s terms, Nginx is a kind of software used as a web server to serve large concurrent requests. Earlier we used to install Apache as a web server to handle those functions, but the world is growing and demanding more things at one time, the term concurrency came into action and Nginx was introduced for the same issue.

This website also uses Nginx as a web server, and I’m able to boost the performance many times.


Why Apache is slow? How did Nginx take over?

Apache was introduced in 1995 when there was no concept of multitasking. Later when the need for multitasking was required MPM (Multi-Processing Module) was added in Apache to overcome the issue. But with this new feature, memory consumption started hogging in the coming years; on the other hand, giant sites started receiving millions of hits every day. So the need for a new web server or change in Apache was required to fix the issues.

This issue was named as C10K (Concurrent 10 Thousand) Problem.

Then Igor Sysoev started the development of Nginx in 2002 to overcome the same issue and the first time Nginx was publicly released in 2004. Nginx is lightweight and can handle large numbers of concurrent requests without hogging too much resources.

It solved the problem of C10K.

Also Read: Apache vs Nginx

Now (in 2014) Nginx hosts nearly 12% (22+ Million) of active sites across all domains.

How does Nginx work?

Nginx follows the event-based process; it does not create an individual thread of requests for each process as Apache does, but smartly follows process events. Below is a demonstration of an Nginx server handling concurrent MP3 and MP4 file requests.

How NGINX Works? - Demonstration
How Does NGINX Work? – Demonstration

Nginx divided its job into Worker Connections and Worker Processes. Here worker connections manage the request made and the response obtained by users on the web server; at the same time, these requests are passed to their parent process which is the Worker Process.

A single worker connection (See in Diagram: Worker Connections) can handle around 1024 connections at a time. It is the greatest ability of a worker connection.

There can be “n” numbers of the worker process in Nginx based on the type of server you have, and each worker process handles different jobs; so it can handle more concurrent requests.

Finally, the worker process transfers the requests to the Nginx Master Process, which quickly responds to the unique requests only.

Also Read: Improve Nginx Performance

Nginx is Asynchronous; that means each request in Nginx can be executed concurrently without blocking each other like a water pipe. So this way Nginx enhances the virtually shared resources without being dedicated and blocked to one connection. That is why Nginx can do the same work with less amount of memory and utilizes that memory in an optimized way.

Leave a Reply

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


  1. Floyd Smith Avatar
    Floyd Smith

    Thanks for this, Atul. There’s a new O’Reilly book coming out introducing NGINX. A free preview version is available now. You can check it out Here: Announcing O’Reilly’s New Book: “NGINX: A Practical Guide to High Performance”

    1. Atul Kumar Pandey Avatar

      Thanks, Floyd Smith for the news about the new book. I will love to use it and my readers too.

  2. Raul Rey Avatar
    Raul Rey

    Hello Atul. I have a problem. I have a Ubuntu 16.04 server with NGINX 1.10 and I´m trying to configure 2 virtual hosts and support for PHP 5.6 FPM. I have both virtual host working fine but only one it’s executing php scripts, I have same configuration for both, I really don’t understand whats happening. Any ideas about whats happening in there?

    1. AtulHost Avatar

      There could be 2 issues as I am just guessing what could be wrong there.

      1. Directory permission issue might be an issue, if you are using sockets for PHP then you must use www-data as owner. You can do it by chown (Change Owner) command. If you are using TCP/IP then this is not required.
      2. Check configurations once again, there could be a single dot like mistake.

      Also, make sure that you make a shortcut file of all sites-available to sites-enabled. One default file already exists there and for the new one, you need to link that first.

  3. Sandeep Acharya Avatar
    Sandeep Acharya

    Simple and understandable article, Thanks a ton! Nginx is really future for web servers, it is easy to setup and robust in performance. I am also making decision to switch to Nginx asap.

  4. JP Avatar

    Great reading! Concise yet clear and deep enough to answer what NGINX is.