Apache is a flexible server which can be process-based, thread-based or event-based as determined by the MPM used, while nginx is an event-based web server.
Nginx is probably the two best-known asynchronous servers and Apache is undoubtedly the best known originally process-based server. The main advantage of the asynchronous approach is scalability. In a process-based server, each simultaneous connection requires a thread which incurs significant overhead. An asynchronous server, on the other hand, is event-driven and handles requests in a single (or at least, very few) threads.
Nginx works differently than Apache, mainly with regard to how it handles threads. Nginx does not create new processes for each web request, instead the administrator configures how many worker processes to create for the main Nginx process. Each of these processes is single-threaded. Each worker can handle thousands of concurrent connections. It does this asynchronously with one thread, rather than using multi-threaded programming. NGINX in opposite to Apache, instead of using the multi-threaded approach with blocking I/O, it uses an event loop with asynchronous I/O. Because of these design choices, NGINX is often able to handle more requests and connected clients. Below situated illustrations show a benchmark comparison NGINX and Apache.
NGINX is using in Node solutions to serve big traffic in case of static datas (e.g. hosting static files and proxying)
(source – pictures: