When talking about Nginx, it is important to know that there are multiple ways to implement Nginx. It can be setup as a reverse-proxy in front of Apache, which is a very powerful setup that allows you to use all of the features and power of Apache, while benefitting from the speed of Nginx. Most websites that report using Nginx as the server (based on stats gathered from HTTP response headers), are actually Apache running with Nginx as the reverse proxy. (The HTTP response headers showing "Nginx" are being reported by the reverse-proxy, not the server itself.)
Nginx was written with an explicit goal of outperforming the Apache web server.  Out of the box, serving static files, Nginx uses dramatically less memory than Apache, and can handle roughly four times more requests per second.  This performance boost comes at a cost of decreased flexibility, such as the ability to override systemwide access settings on a per-file basis (Apache accomplishes this with an .htaccess file, while Nginx has no such feature built in).  Formerly, adding third party modules to nginx required recompiling the application from source with the modules statically linked . This was partially overcome in version with the addition of dynamic module loading . However, the modules still must be compiled at the same time as nginx, and not all modules are compatible with this system—some require the older static linking process.