Sep 26, 2023
Richard B. & Aris B.
NGINX vs Apache – Choosing the Best Web Server in 2023
A web server is computer software that delivers content through the internet and transmits data between the host system and the user’s browser.
Choosing the right web server is crucial when setting up a website or starting a virtual server (VPS) project since it can significantly affect their performance and security. If unsure, consider the two most popular options – Apache and NGINX.
To help you decide, we will compare NGINX vs Apache in detail. After offering a general overview of the two options, we will explore what each web server offers regarding architecture, compatibility, performance, and security.
NGINX vs Apache Overview
Before diving into the Apache vs NGINX comparison, let’s clarify what these web servers are by exploring their general characteristics and differences. This will help you understand more about each of them.
Commonly referred to as Apache or Apache HTTPD, the Apache HTTP Server is a free and open-source web server software. It processes client requests and serves web content via Hypertext Transfer Protocol (HTTP).
The Apache Software Foundation released the Apache web server in 1995 and has maintained it ever since. It was the most dominant web server during the early world wide web and remains popular today.
Apache HTTP Server currently powers around 30% of websites worldwide, making it the second biggest web server in the market.
The Apache web server is compatible with many operating systems such as Microsoft Windows, OpenVMS, and other Unix-like OSs like Linux and macOS. It supports various communication protocols, including HTTP, HTTPS, WebSocket, and HTTP/2.
The Apache HTTP server is part of the LAMP stack, one of the first open-source software stacks for web development. It makes the web server compatible with various software, content management systems (CMS), programming languages, and web frameworks.
Apache server is popular for its module system that provides high performance and flexibility. With Apache’s modules, users can easily add or remove functions to modify their server according to their needs.
NGINX – pronounced as “Engine X” – is one of the most reliable web servers offering scalability and speed. Apache and NGINX have a similar market share size, but the latter is more popular. Both web servers are open-source and free to use.
Software engineer Igor Sysoev started developing NGINX in 2002 to answer the C10K problem of the early world wide web. Back then, many web servers could only handle 10,000 connections simultaneously.
NGINX web server was released with an asynchronous and event-driven architecture, allowing it to process many client requests simultaneously.
This popular web server is known for its ability to handle high traffic and scale with minimal hardware. Plus, it’s excellent at serving static files quickly. It is a part of the LEMP web stack, a popular alternative to Apache’s LAMP.
In addition to a web server, web developers use NGINX as a load balancer to improve the host system’s resource efficiency and availability. Moreover, it can function as a reverse proxy – an intermediary that distributes content requests evenly to ensure smooth traffic flow between servers and clients.
Important! Apache can also act as a reverse proxy server and load balancer. However, it is more often used for a back-end server to leverage its modules and dynamic content processing.
NGINX supports almost all Unix-like operating systems. Installing NGINX on Windows may result in performance limitations, like a lack of scalability and user datagram protocol (UDP) authentication problems.
Basic Architecture: Handling Connections
Web server architecture is the logical layout or mechanism determining how the software handles web requests, connections, and traffic. It’s one of the essential criteria to consider when choosing a web server.
Let’s compare NGINX vs Apache regarding basic architecture and how both software handle connections.
By default, Apache follows a process-driven architecture, creating a single thread to handle each connection request.
This downside is that Apache must create different processes when handling many client requests. This can lead to heavy resource consumption, causing server issues like slow website loading speed and recurring downtime.
As a solution, Apache provides various multi-processing modules (MPMs) that determine how it accepts and handles HTTP requests. Users can choose any MPM that best suits their needs. There are three main MPMs:
- mpm_prefork – the prefork MPM is not threaded, meaning each child process can only handle one request. Its performance immediately degrades after the requests exceed the number of processes, making it difficult to scale with this MPM.
- mpm_worker – each worker MPM process can create multiple threads that can handle individual connections. This allows the system to serve multiple requests simultaneously. Since threads need fewer resources than processes, it is more scalable and efficient than the prefork MPM.
- mpm_event – it is similar to the worker MPM but also optimized to handle keep-alive connections. To do so, it reserves dedicated threads for managing such connections and allocating active requests to other threads. This process helps the event MPM perform well despite handling many keep-alive requests, resulting in low resource consumption.
Remember that you can only load one MPM into your server simultaneously. If your project requires stability and compatibility, use the prefork MPM. However, consider utilizing the worker or event MPMs for websites that need more scalability and diversity.
Many web servers use a simple threaded or process‑driven architecture. However, NGINX uses a different approach with an asynchronous, non-blocking, event-driven architecture. This enables the web server to handle multiple connections within a single process.
NGINX has a master process that performs privileged operations such as binding to ports, reading and evaluating configuration files, and creating child processes.
Here are three types of NGINX child processes:
- Cache loader process – lets you load the disk‑based cache into the memory zone. This process consumes small server resources since it runs only once after NGINX starts.
- Cache manager process – keeps the amount of cached data within the configured sizes by checking it periodically and removing the least accessed ones.
- Worker process – handles multiple HTTP connections simultaneously, eliminating the need to create new processes or threads. Instead, each process runs independently and contains smaller units called worker connections responsible for handling request threads. In addition to communicating with upstream servers, the worker process can read and write stored content.
NGINX’s event-driven architecture can effectively distribute client requests among worker processes. As a result, the efficiency and resource consumption in Apache and NGINX differ.
Since NGINX can process thousands of client requests efficiently with minimal resources, it is suitable for high-traffic websites, such as search engines, eCommerce sites, and cloud storage services.
Many popular content delivery networks (CDNs), like MaxCDN and Cloudflare, use NGINX to handle requests.
Performance Comparison: Dynamic vs Static Content
In this section, we will explore the performance comparison of Apache and NGINX for static and dynamic content request processing.
Meanwhile, dynamic content is a web file that changes based on the user’s actions, characteristics, and preferences. This web page content looks different depending on the user since it’s generated according to a specific request. An example of such content is PHP files.
Apache serves static content using its traditional file-based approach. This operation’s performance is primarily a function of MPMs.
One of Apache servers’ advantages is its ability to handle dynamic content internally without relying on external components.
It processes dynamic content by integrating a processor of suitable programming languages into each worker instance. Users can activate this processor through Apache’s dynamically loadable modules.
In terms of serving static content, NGINX is faster than Apache because it caches the static files to make them available whenever requested.
However, NGINX doesn’t have built-in dynamic content processing capability. To process dynamic content, it must pass the requests to an external processor like FastCGI Process Manager (PHP-FPM).
This external processor will interpret requests into the dynamic content and send the result back to the web server. Once the web server receives the content, it will transfer the results to the client.
Directory-Level Configuration for NGINX vs Apache
If you want to give another user control over some of your website components, pick a web server that permits directory-level configuration. In this section, we will compare configuration differences between Apache and NGINX.
Apache web servers support additional per-directory configuration via .htaccess files. They allow non-privileged users to control specific aspects of your website without granting them editing access to the main configuration files.
Many shared hosting providers use Apache to give their clients access to specific directories while retaining control of the main configuration file.
Apache also interprets .htaccess files each time they are found along a request path. The web server can immediately implement rules within the files without rebooting.
However, using .htaccess files has several downsides. It can affect your site’s performance since Apache loads each .htaccess file for every document request. This consumes many resources, especially for sites with high traffic and complex web pages.
Additionally, allowing users to modify the .htaccess files might result in security missteps. If you don’t need other parties to tweak the server settings, make sure to disable access to such files.
Unlike Apache, NGINX doesn’t support directory-level configuration. While this results in limited flexibility, it helps increase site performance.
Since NGINX is designed to be efficient, it doesn’t need to search for .htaccess files and interpret them, allowing it to serve a request faster than Apache.
NGINX keeps your server secure by disallowing additional configuration since only users with root permission can alter the server and site settings.
Modules in Apache vs NGINX
Most web servers have a standard configuration file by default. However, developers often include modules to extend the web server functionality and make programming more convenient.
Although NGINX and Apache functionalities are extensible through a module system, they work differently.
Apache is a customizable web server that lets users install over 50 official and third-party modules. It also supports dynamic module loading for more efficient memory utilization.
While the server’s core features are always available, users can load and unload modules to modify them.
Apache modules can accomplish various tasks, such as processing dynamic content, setting environment variables, and rewriting URLs. Here are some of Apache’s most commonly used modules:
- mod_headers – lets you control and customize HTTP request and response headers in your Apache web server.
- mod_expires – allows users to define expiration intervals for different website content types.
- mod_authz_host – enables access control and authorization based on the request’s hostname, IP address, or characteristics.
- mod_mime – helps assign content meta-information with filename extensions.
- mod_alias – lets users inform clients that the requested URL is incorrect.
Remember that Apache has pre-installed modules and loads them into server memory. So, disable unused features to reduce resource consumption and maintain optimal server performance.
NGINX offers various official and third-party modules to integrate within the core software. Users knowledgeable in C languages can also create custom NGINX modules that suit their project’s needs.
However, NGINX doesn’t support dynamic module loading, as the web server must compile them within the core software. Users need to opt for NGINX Plus to make them load dynamically.
While this makes NGINX less flexible than Apache, it helps improve security since integrating many dynamic modules might pose security risks.
Security with Apache vs NGINX
Picking a secure web server is crucial to keep your website data safe and updated with the latest patches. Here is the comparison between Apache vs NGINX regarding security features.
The Apache Software Foundation has the Apache Server Announcements mailing list to ensure users stay informed about the latest updates from the software development team.
To keep the web server secure, Apache implements configuration settings to help combat denial-of-service (DoS) attacks, such as:
- TimeOut – defines how many seconds Apache will wait for specific events before failing a request. Websites subject to DoS attacks should have this number as low as a few seconds.
- RequestReadTimeout – shuts down connections from clients that don’t send their requests quickly enough.
- KeepAliveTimeout – decides how long the Apache server will wait and keep the connection open for a new request.
Although Apache is built to be secure and stable, your server security also depends on how you configure it. Make sure to implement additional security measures, such as installing a web application firewall (WAF).
NGINX also offers several security controls by default, such as rate-limiting. This feature protects your server from DDoS attacks by reducing the incoming request rate to a value typical for real clients.
Rate-limiting is also used to protect upstream application servers from an overload of simultaneous user requests. It helps improve your server uptime and maintain consistent performance.
Besides that, NGINX users can prevent DDoS attacks by allowing or denying access based on clients’ IP addresses. They can also limit access using a password, the result of a subrequest, or bandwidth.
Moreover, NGINX supports the latest transport layer security (TLS) version, which offers reliable data transmission encryption.
To get more security features, consider using NGINX Plus. This premium version grants you access to the single sign-on (SSO) function. It lets you securely authenticate access to multiple websites and applications with one set of credentials.
In addition, NGINX users can go to the web server’s official website to find more security advisories and news about the latest updates.
Apache vs NGINX Platform Support
All developers should pick a web server with excellent user support to ensure assistance when facing software-related issues. Here’s the comparison between Apache and NGINX community support.
Apache offers extensive documentation that covers various topics about the software. It also provides community support via email, allowing users to get help from people familiar with the Apache HTTPD.
Users can also ask quick questions on Stack Overflow and the #httpd channel on the Freenode IRC network. While Apache doesn’t offer direct customer support, users can easily find online answers related to the web server due to its popularity.
Moreover, third-party tech support companies offer dedicated assistance for Apache at different prices. Alternatively, you can get support from your hosting provider, which is usually included for free with the purchased plan.
NGINX provides a community-operated mailing list to help users solve web development issues. In addition, it offers a public support forum to assist its users.
Since there are many NGINX users, it’s easy to find other community forums where developers share how to fix technical issues.
NGINX also provides many learning resources to help beginners learn more about the software, such as blogs, glossaries, documentation, eBooks, webinars, and datasheets.
Unlike Apache, NGINX offers dedicated support from its team in the premium version. It can assist you with web server installation and deployment.
Choosing a Web Server
Based on the comparisons, Apache and NGINX use cases differ. This makes each of them suitable for different user needs. Before choosing, make sure you understand the advantages and disadvantages of both options.
Apache server advantages mainly lie in its flexibility. It offers root access to modify the main configuration file, letting non-privileged users control several server settings. However, it can consume a lot of server memory.
Meanwhile, NGINX server advantages include higher performance when handling static content requests, the capability to serve many clients simultaneously, and resource efficiency. These make the web server excellent for sites with complex web pages and high traffic volumes.
Additionally, NGINX is multi-functional. Users can use it as a web server, reverse proxy, load balancer, or caching solution. However, it can’t process dynamic content by default and require a back-end application server.
Both web servers are similar regarding their software compatibility. They support various operating systems and content management systems, making them suitable for WordPress sites.
Choose a VPS plan from a hosting provider that supports NGINX and Apache. Hostinger’s VPS plans offer various features to complement your chosen web server, including:
- 24/7 support – users can contact Hostinger’s multilingual Customer Success team 24/7 via email or live chat. It’s important since NGINX and Apache don’t offer free direct support.
- Robust security features – all of Hostinger’s VPS hosting plans offer various built-in features that improve your web server security. For instance, they have PHP hardening software and a web application firewall.
- Root access – our VPS allows users to access and configure the server with root permission. Regardless of the web server, you will have full control over your VPS.
- Scalable resources – Hostinger offers four VPS hosting plans with different resource allocations. Users can easily upgrade the resources of their VPS via hPanel to scale their Apache or NGINX web server.
Alternatively, instead of choosing between Apache and NGINX, consider other popular web servers. Web servers like Tornado, Node.js, and Tomcat may suit your needs better.
Another option is to combine NGINX and Apache to leverage both web servers’ strengths.
Commonly, Apache is used as a back-end server due to its native dynamic content processing capabilities and modules. Meanwhile, NGINX is often used as a front-end reverse proxy server and load balancer that distributes client requests.
Want to know more about these two web servers? Check out our other NGINX and Apache tutorials.
How to Create Apache Virtual Hosts on CentOS 7
How to Create Temporary and Permanent NGINX Redirect
How to Setup an NGINX Reverse Proxy
How to Install WordPress With Nginx
Choosing the right web server is important to ensure your VPS projects are secure and well-performing. Since choosing one can be difficult, we have compared two of the most popular web servers – NGINX and Apache.
To help you choose between the two web servers, we have reviewed NGINX vs Apache in various aspects. Let’s recap each category we have compared:
- Basic architecture – Apache creates a single thread to manage each connection request. Meanwhile, a single NGINX process can simultaneously handle multiple connections.
- Performance – NGINX server performs faster than Apache in providing static content but requires additional software to process the dynamic one. Meanwhile, Apache can process dynamic content natively.
- Directory-level configuration – Apache enables .htaccess configuration, allowing users to tweak their site’s settings without modifying the main server. Meanwhile, NGINX doesn’t support directory-level configuration.
- Modules – Apache modules support dynamic loading, while NGINX ones must be compiled within the core software.
- Security – both Apache and NGINX are secure and reliable. They also have several security tools to protect a site against DDoS attacks.
- Support – Apache and NGINX offer community support and documentation to help beginners with issues. However, NGINX offers direct support on the premium version.
To sum up, Apache provides flexibility and a wide range of modules, while NGINX offers scalability, speed, and multifunctionality as a reverse proxy server.
Regardless of your choice, both web servers support various software to provide a complete web stack for your development.
NGINX vs Apache Server FAQ
In this section, we will answer several common questions about Apache vs NGINX.
What Are the Main Differences Between Apache and NGINX?
NGINX has an event-driven architecture that handles multiple requests within a single thread. Meanwhile, Apache is process-driven, creating a thread per request.
It makes NGINX more resource-efficient and high-performance than Apache. However, it can’t load modules dynamically, grant directory-level configuration privileges, and natively execute dynamic content.
Can Apache and NGINX Work Together?
Yes. You can set NGINX or Apache as a standalone web server or combine them to leverage their strengths – NGINX for its fast processing speed and Apache for its powerful modules.
The common practice for using both software is using NGINX as a reverse proxy server in front of Apache since it can handle hundreds of concurrent connections.
How Does Scalability Compare Between Apache and NGINX?
The scalability of Apache vs NGINX differs due to different architecture and resource consumption. While Apache is also scalable, NGINX is better due to its efficiency.
NGINX architecture can efficiently handle requests within a single thread and evenly distribute them across the worker process. This architecture allows for efficient resource allocation, making the web server highly scalable.