Ngnix - High Performance Web Server, Proxy Server, Content Cache and Reverse Proxy

  •        0
  

We aggregate and tag open source projects. We have collections of more than one million projects. Check out the projects section.



Nginx is a High Performance Web Server, Proxy Server, Content Cache and Reverse Proxy server. It can also be used as mail proxy server and a generic TCP/UDP proxy server. Nginx claims to be more efficient and faster in the Web space compared to the other web servers. This can be evident with the architecture which is based on asynchronous event-driven approach. The event driven architecture enables to scale to hundreds / thousands of concurrent connections.

How it works:

Nginx webserver has the following components.

  1. Master process – Reads configuration, bind to ports and create child processes
  2. Cache Loader process – Runs at startup / scheduled conservatively to load disk-based cache
  3. Cache Manager process – Runs periodically and prunes entries from disk caches to manage
  4. Worker process – Handles network connections, reads and writes content to disk and communicate with upstream server

Each worker process is provided with a set of listen sockets by the master process. The worker process begin by waiting for events on the listen sockets. Events are initiated by new incoming connections which are assigned to a state machine.

Why Ngnix is faster:

Typically Linux applications are built as process or threads which working in “blocking” mode. However with Nginx, the worker process handles this in non blocking mode as described below:

Events occur on sockets and worker process handles them

  1. An event on the listen socket means that a client has initiated a new connection reques
  2. An event on the connection socket means that a client has made a HTTP request.

Each new connection creates another file descriptor and consumes a small amount of memory in the worker process. These processes can be pinned to process CPUs and hence context switches are very minimal.

Ngnix as Load Balancer:

In a cloud environment usually there will be one or more web servers to serve the user request. Ngnix will be placed in front of all web servers and it will balance the incoming request to the available web servers. It supports session persistence (sticky session) where in the request from same client / IP will be routed to same backend server. Web server maintains session, from login to logout all request from that client will be routed to the same backend server.

Ngnix as Proxy server and Content Cache Server

In production environment the actual web servers will not be exposed to public. There will be a proxy server or CDN will be placed in-front of the web servers. Client will hit the proxy server which in turn proxies to the backend server. Static content like images, CSS, Javascript etc may not change frequently. Ngnix can cache the static content so that the request will be directly served from cache and it does not need to hit the backend server.

Installing Ngnix:

On Debian / Ubuntu:      

sudo apt-get install nginx

 

On Redhat / Centos:       

sudo yum install nginx

 

Start / Stop / Restart Service:

sudo service nginx {start | stop | restart | reload }

 

To view the status:

sudo service status nginx

 

Simple Configuration:

Ngnix conf file will be located at /etc/nginx/nginx.conf. If it does not exist there, it may also be at /usr/local/nginx/conf/nginx.conf or /usr/local/etc/nginx/nginx.conf. Below example has a simple configuration where nginx shows the capability of Reverse proxy and also a load balancer.

 

user       www www;  ## Default: nobody

worker_processes  5;  ## Default: 1

error_log  logs/error.log;

pid        logs/nginx.pid;

worker_rlimit_nofile 8192;

 

events {

  worker_connections  4096;  ## Default: 1024

}

 

http {

  include    conf/mime.types;

  include    /etc/nginx/proxy.conf;

  include    /etc/nginx/fastcgi.conf;

  index    index.html index.htm index.php;

 

  default_type application/octet-stream;

  log_format   main '$remote_addr - $remote_user [$time_local]  $status '

    '"$request" $body_bytes_sent "$http_referer" '

    '"$http_user_agent" "$http_x_forwarded_for"';

  access_log   logs/access.log  main;

  sendfile     on;

  tcp_nopush   on;

  server_names_hash_bucket_size 128; # this seems to be required for some vhosts

 

  server { # simple reverse-proxy

    listen       80;

    server_name  domain2.com www.domain2.com;

    access_log   logs/domain2.access.log  main;

 

    # serve static files

    location ~ ^/(images|javascript|js|css|flash|media|static)/  {

      root    /var/www/virtual/big.server.com/htdocs;

      expires 30d;

    }

 

    # pass requests for dynamic content to rails/turbogears/zope, et al

    location / {

      proxy_pass      http://127.0.0.1:8080;

    }

  }

 

  upstream big_server_com {

    server 127.0.0.3:8000 weight=5;

    server 127.0.0.3:8001 weight=5;

    server 192.168.0.1:8000;

    server 192.168.0.1:8001;

  }

 

  server { # simple load balancing

    listen          80;

    server_name     big.server.com;

    access_log      logs/big.server.access.log main;

 

    location / {

      proxy_pass      http://big_server_com;

    }

  }

}

 

Updating Configuration:

Updating configuration is simple, lightweight and a reliable operation with Zero downtime of application. Whenever there is a new config available and when master process receives a signal to reload the config, the following sequence takes place.

  1. Reloads configuration and forks new worker processes. These new worker processes begin accepting connections and process traffic
  2. Signals old worker processes to gracefully exit. As soon as HTTP request is complete, the worker process shuts down the connection, and when all connections are closed, worker process exits.

 

Reference

https://www.nginx.com/

https://www.nginx.com/blog/testing-the-performance-of-nginx-and-nginx-plus-web-servers/

 


Sponsored:
To find embedded technology information about MCU, IoT, AI etc Check out embedkari.com.


   

We publish blog post about open source products. If you are interested in sharing knowledge about open source products, please visit write for us

Subscribe to our newsletter.

We will send mail once in a week about latest updates on open source tools and technologies. subscribe our newsletter



Related Articles

An introduction to web cache proxy server - nuster

  • web-cache proxy-server load-balancer

Nuster is a simple yet powerful web caching proxy server based on HAProxy. It is 100% compatible with HAProxy, and takes full advantage of the ACL functionality of HAProxy to provide fine-grained caching policy based on the content of request, response or server status. This article gives an overview of nuster - web cache proxy server, its installation and few examples of how to use it.

Read More


Getting Started on Undertow Server

  • java web-server undertow rest

Undertow is a high performing web server which can be used for both blocking and non-blocking tasks. It is extermely flexible as application can assemble the parts in whatever way it would make sense. It also supports Servlet 4.0, JSR-356 compliant web socket implementation. Undertow is licensed under Apache License, Version 2.0.

Read More


Appserver.io – The First Multithreaded Application Server for PHP written in PHP

  • appserver application-server php

What if you could reliably run PHP without Nginx or Apache, but also without relying on its internal server? What if you could do async operations in PHP with true multi threading, fully taking advantage of multi core processors without hacks or a jungle of callbacks? What if you had drag and drop installation support for your PHAR packaged web apps in an environment identical to its production counterpart? Welcome to appserver.io – the worlds first open source application server for PHP.

Read More


Univention Corporate Server - An open source identity management system

  • ucs identity-management-system

Univention Corporate Server is an open source identity management system, an IT infrastructure and device management solution and an extensible platform with a store-like App Center that includes tested third party applications and further UCS components: This is what Univention combines in their main product Univention Corporate Server, a Debian GNU/Linux based enterprise distribution. This article provides you the overview of Univention Corporate Server, its feature and installation.

Read More


Lucene Vs Solr

  • searchengine lucene solr

Lucene is a search library built in Java. Solr is a web application built on top of Lucene. Certainly Solr = Lucene + Added features. Often there would a question, when to choose Solr and when to choose Lucene.

Read More



Introduction to Apache Cassandra

  • cassandra database nosql

Apache Cassandra was designed by Facebook and was open-sourced in July 2008. It is regarded as perfect choice when the users demand scalability and high availability without any impact towards performance. Apache Cassandra is highly scalable, high-performance distributed database designed to handle large voluminous amounts of data across many commodity servers with no failure.

Read More


Desktop Apps using Electron JS with centralized data control

  • electronjs couchdb pouchdb desktop-app

When there is a requirement for having local storage for the desktop application context and data needs to be synchronized to central database, we can think of Electron with PouchDB having CouchDB stack. Electron can be used for cross-platform desktop apps with pouch db as local storage. It can sync those data to centralized database CouchDB seamlessly so any point desktop apps can recover or persist the data. In this article, we will go through of creation of desktop apps with ElectronJS, PouchDB and show the sync happens seamlessly with remote CouchDB.

Read More


Angular Service Workers Usage Guide

  • angular service-worker offline-app

Web developers come across scenarios like web application completely breaks when workstation goes offline. Likewise to get into our application, every time we need to open a browser and then access it. Instead if it is in app, it will be easy to access for end-user. Push notifications similar to email client need to be done through web application. All these are addressed by a magic called service worker.

Read More


SeoToaster: easy, fast and efficient open source CMS for top SEO performance

  • cms content-management-system seo ecommerce

SeoToaster is a free Open Source CMS & Ecommerce solution to build, manage and market websites optimized for for top search engine performance. As the name implies, Seo Toaster is to date the only content management system (CMS) to truly integrate SEO execution and web marketing automation technology in full compliance with the search engines industry’s best practices.

Read More


Introduction to Light 4J Microservices Framework

  • light4j microservice java programming framework

Light 4j is fast, lightweight, secure and cloud native microservices platform written in Java 8. It is based on pure HTTP server without Java EE platform. It is hosted by server UnderTow. Light-4j and related frameworks are released under the Apache 2.0 license.

Read More


Scale up vs Scale out. First decision to make before moving to cloud

  • cloud scale-up scale-out scalability

Before moving to cloud, First decision to make is whether Scale up the hardware or Scale out with multiple systems. Both has its pros and cons.

Read More


Light4j Cookbook - Rest API, CORS and RDBMS

  • light4j sql cors rest-api

Light 4j is a fast, lightweight and cloud-native microservices framework. In this article, we will see what and how hybrid framework works and integrate with RDMS databases like MySQL, also built in option of CORS handler for in-flight request.

Read More


LogicalDOC - Open Source DMS

  • dms document-management-system

LogicalDOC is both a document management and a collaboration system. The software is loaded with many functions and allows organizing, indexing, retrieving, controlling and distributing important business documents securely and safely for any organization and individual.

Read More


Push Notifications using Angular

  • angular push-notifications notifications

Notifications is a message pushed to user's device passively. Browser supports notifications and push API that allows to send message asynchronously to the user. Messages are sent with the help of service workers, it runs as background tasks to receive and relay the messages to the desktop if the application is not opened. It uses web push protocol to register the server and send message to the application. Once user opt-in for the updates, it is effective way of re-engaging users with customized content.

Read More


ONLYOFFICE Document Server, an online office app for Nextcloud and ownCloud

  • office office-suite word spreadsheet

ONLYOFFICE Document Server is a free collaborative online office suite including viewers and editors for texts, spreadsheets and presentations, fully compatible with Office Open XML formats (.docx, .xlsx, .pptx). This article provides you the overview of ONLYOFFICE Document Server, its features, installation and integration with Nextcloud and ownCloud.

Read More


MailHog - Web and API based SMTP testing

  • smtp-testing testing-tool smtp test automation email-server email

Most of the projects will have a requirement of sending and receiving mails. We have mentioned about GreenMail - Email Test Framework, in our previous article about API based SMTP testing. In this article, we discuss about MailHog - Web and API based SMTP testing. You send out a mail from your code and you can check it via web visually and also via API. Those who do API testing can check via API. Developers may want to visually verify the format of the mail. MailHog is a best bet for SMTP testing.

Read More


Should web application store images in Database or File system?

  • database image-store filesystem

Web developers most frequent question, Should user images be stored in database or file system? Which is the best way. Both has some pros and cons.

Read More


JWT Authentication using Auth0 Library

  • java jwt authentication security

Json Web Token shortly called as JWT becomes defacto standard for authenticating REST API. In a traditional web application, once the user login credentials are validated, loggedin user object will be stored in session. Till user logs out, session will remain and user can work on the web application without any issues. Rest world is stateless, it is difficult to identify whether the user is already authenticated. One way is to use authenticate every API but that would be too expensive task as the client has to provide credentials in every API. Another approach is to use token.

Read More


Connect to MongoDB and Perform CRUD using Java

  • java mongodb database programming

MongoDB is a popular and widely used open source NoSQL database. MongoDB is a distributed database at its core, so high availability, horizontal scaling, and geographic distribution is quite possible. It is licensed under Server Side Public License. Recently they moved to Server Side Public License, before that MongoDB was released under AGPL. This article will provide basic example to connect and work with MongoDB using Java.

Read More


Cache using Hazelcast InMemory Data Grid

  • hazelcast cache key-value

Hazelcast is an open source In-Memory Data Grid (IMDG). It provides elastically scalable distributed In-Memory computing, widely recognized as the fastest and most scalable approach to application performance. Hazelcast makes distributed computing simple by offering distributed implementations of many developer-friendly interfaces from Java such as Map, Queue, ExecutorService, Lock and JCache.

Read More