Tue 4 Apr 2006
Today, I want to describe one of the interesting tools I am using in my job. This tool is nginx - small, but very powerful and efficient web server created by Igor Sysoev for large Russian web company Rambler and kindly provided by open-source community. This server can be used as standalone HTTP-server and as reverse proxy server before some Apache or another “big” server” to reduce load to backend server by many concurrent HTTP-sessions. As standalone web server, nginx can easily handle huge http-load on static files (images, html-pages, etc).
Main features of nginx server:
- Handling requests to static content, automatical handling of index files and building directory listings.
- Accelerated proxying without caching, simple load banancing and fail-over.
- Accelerated support of remote FastCGI servers with simple load banancing and fail-over.
- Modules and filters including compression (gzip), byte-ranges, chunked responses, SSI-filter, concurrently executed FastCGI or proxy subrequests from one SSI-page.
- SSL-support.
Advanced features of nginx server:
- IP-based and name-based virtual servers.
- Support for keep-alive and pipelined connections.
- Flexible configurations like in Apache, tunable timeouts and buffers.
- Config file and even executable file updating without any termination in service.
- Tunable log files with fast rotation.
- Special pages for errors 400-599.
- Very efficient URI rewriting with regular expressions.
- Access rules based on client’s IP address and on pasword (Basic auth).
- Download speed limits.
Main architecture specifics of nginx server:
- One management and many worker processes; workers are running from non-privileged user.
- Support for different techniques for asynchronous sockets handling: kqueue (FreeBSD 4.1+), epoll (Linux 2.6+), rt signals (Linux 2.2.19+), /dev/poll (Solaris 7 11/99+), select and poll.
- sendfile() system call support: sendfile (FreeBSD 3.1+), sendfile (Linux 2.2+), sendfile64 (Linux 2.4.21+) and sendfilev (Solaris 8 7/01+).
- Accept-filters support on FreeBSD 4.1+ and TCP_DEFER_ACCEPT on Linux 2.4+.
- Very efficient memory handling: it needs only 2.5Mbytes of RAM for 10000 inactive keep-alive connections.
- Minimum of memory copying operations
As an experimental feature, perl interpreper integration can be turned on in nginx.
As for my job, we are using nginx as a primary software for free hosting platforms. I have developed specific modules for banner inserting and stats calculation in nginx and now our central server can handle about 150-200Mbit/s of highly fragmented http-traffic (all files are small). I think, this is really good result bacause with any possible tunnings of Apache on the same servers we were not able to handle even 60-80Mbit/s.
IMHO, main problem of this server is lack of English documentation. As far as i know, its author is really busy and have no time to translate documentation to English. I hope, this article gave you main ideas of what nginx is and why I think that it is the best of lightweight http-servers in the world.
- Compiling nginx in RedHat Linux: PCRE library problem
- Typical Configurations Overview For Nginx HTTP(S) Reverse Proxy/Web Server
- Using Nginx, SSI and Memcache to Make Your Web Applications Faster
- Nginx With PHP As FastCGI Howto
- Flash Video (FLV) Streaming With Nginx

Add New Comment
Viewing 11 Comments
Thanks. Your comment is awaiting approval by a moderator.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Add New Comment
Trackbacks