Home > Article > Operation and Maintenance > What are the differences between Nginx and Apache?
Nginx, like Apache, is HTTP server software. Both adopt modular structure design in functional implementation. Both support common language interfaces, such as PHP, Perl, Python, etc., and also support forward and reverse. To proxy, virtual host, URL rewriting, compressed transmission, SSL encrypted transmission, etc.
The main difference between Apache and NGINX is their design architecture. Apache uses a process-driven approach and creates a new thread for each request. NGINX uses an event-driven architecture to handle multiple requests in a thread.
Apache HTTP server is an open source cross-platform web server, also known as "httpd" and Apache. He manages the Apache Software Foundation's brands and services. The server is developed and maintained by an open developer community under ASF. Apache runs primarily on Linux and powers 46% of the world’s websites. It is a key component of the LAMP (Linux, Apache, MySQL, PHP) stack.
What is NGINX? Pronounced? It is pronounced "Engine X" It is a web server released in 2004 by Igor Sisoev. Today, it's more than just a web server! In the beginning, people mostly used Nginx as a complement to Apache. It was mainly used to serve static files, but today, it has evolved into a complete web server that handles the entire web server tasks. Nginx is often used as a reverse proxy, load balancer, mail proxy, and HTTP cache. Apache and Nginx are both the most common web servers for Linux. Together, they serve more than 50% of network traffic.
Although Apache and NGINX share many qualities, they are different in many ways. Each is outstanding in its own way and has its own purpose and scheme. To understand the differences and draw conclusions, let’s go through the detailed, end-to-end comparison below. We also mention the winner of each comparison point at the end of each point.
When it comes to Apache and Nginx, the fundamental difference lies in their design architecture. This means they differ in how they actually handle connections and traffic and respond to different traffic conditions. One is a process-driven approach and the other is an event-driven architecture.
Apache
Process-driven method, creating a new thread for each request. Apache takes a multi-threaded approach. It offers a variety of multiple processing modules. These pre-modules are basically three types of request handling algorithms. Each is used for different server needs. MM (Multiple Processing Module) provides a flexible architecture for selecting different connections and different processing algorithms. Additionally, different versions of Apache 2 use different parade modules. The three main Apache MMs are: process (pre-fork) MPM, worker MPM, and event MPM. By default, Apache 2.2 is configured in prefork mode (mpm_prefork). It responds to a set of processes, each of which can handle a single request at a time. In other words, Apache creates a new thread every time to handle each connection request. A thread is the smallest sequence of programming instructions that can be managed independently by the scheduler. In most cases, threads are components of a process. However, Apache's basic architecture can result in heavy resource consumption and, therefore, may cause server problems (such as slowness).
Event-driven approach, processing multiple requests in one thread, Nginx uses an event-driven architecture and processes requests asynchronously. It is designed to use non-blocking event-driven connection handling algorithms. Therefore, its process can handle thousands of connections (requests) in a single processing thread. This connection process module enables Nginx to work quickly and broadly with limited resources. Additionally, you can use Nginx on low-power systems and systems running under heavy load.
The winner is NGiNX - its structure is lightweight and its architecture is much faster than Apache. Performance In terms of Apache vs Nginx, both web servers handle static and dynamic content differently. They say Nginx is better when handling static content, let’s see if that’s true!
Apache
Uses a file-based approach to serve static content. Static content or files are usually stored on disk on the server computer. Files, such as CSS files, JavaScripts files, or images. Apache uses its traditional file-based approach to static content.
Nginx
Nginx is the big brother when it comes to serving static content. Since Nginx's design architecture is more capable of handling the load, it is much faster at serving static content. It performs 2.5x faster than Apache based on benchmarks up to 1,000 simultaneous connections. Nginx serves static resources, and PHP doesn't need to know this. Apache, on the other hand, handles all these requests with expensive overhead. This makes Nginx more efficient and less demanding on system resources.
This small image shows a request for static content, processed in seconds. Nginx clearly outdoes Apache here!
Apache
Apache can handle dynamic content in the web server itself without dependencies any external components. So, it can handle your own. Talking about Apache vs Nginx performance: Nginx is almost equal (if not better) when considering dynamic content processing. Below is a comparison of the number of dynamic content requests. There is no difference in appearance.
Nginx
It does not handle dynamic content, talking about dynamic content, Nginx cannot handle dynamic content in the web server like Apache content. All requests with dynamic web content are passed to an external process (e.g. PHP-FPM) for execution. Nginx waits for the final content to be returned and delivered to the client. For a clear idea, see this image:
When used with SCGI handlers and the FastCGI module, NGINX can serve dynamic content. Static: Nginx beats Apache when it comes to static content. Dynamic: Both are good at handling dynamic content.
Operating system support can be an important point to consider, especially when comparing Apache vs. Nginx. But, both of them are almost similar here.
Apache
Supports all Unix-like systems, including Linux and BSD. It fully supports MS-WindowsApache running on a variety of Unix-like systems such as Linux or BSD, and fully supports Microsoft Windows.
Nginx
Supports almost all operating systems like Unix. Partially supported on Windows. It also runs on several modern Unix-based systems and has some support for Windows, but its Windows performance isn't as robust as other platforms.
The winner is Apache here.
Apache vs Nginx is a well-deserved topic. Their configuration makes them different from each other, making them equally interesting. Let's see whose configuration is easier and faster.
Apache
Allows additional configuration on a per-directory basis via .htaccess files. This architecture allows unprivileged users to control certain aspects of their website without granting them permission to edit the main configuration. This one is huge!
Nginx
Does not allow additional configuration. On the other hand, it has a drawback. It provides no additional configuration. However, it works to your advantage as this increases performance. By not allowing directory configuration, it can serve requests faster than Apache. It doesn't require searching .htaccess files and interpreting user-made reqs.
Winner: If configuration is a concern, go for Apache; if configuration is a concern, go for Apache. If speed is NGinx.
In the Apache vs Nginx debate, methods of interpreting requests is an interesting topic to compare. They all handle and interpret requests in completely different ways.
Their different approaches make them unique and also make one a little better than the other. Let’s explore it!
Apache
Pass the file system location, providing the ability to interpret the request. A more abstract evaluation may be required as a physical resource as a file system location. It passes the request as a file system location.
Of course, Apache does use URI locations, but they are generally used for more abstract resources. Apache uses the directory block under the document root when creating or configuring a virtual host.
This preference for file system locations can also be seen when using .htaccess files to override specific directory configurations.
Nginx
Interpreting requests via URI, Nginx is created as a web server and reverse proxy server. Because of these architectural requirements, Nginx works primarily with your eyes. Convert to system if necessary. It does not provide a mechanism to specify configuration. For a file system directory, pass the URI itself. Passing the request (URI) instead of the file system location enables Nginx to run easily in web and proxy servers. It is simply configured by how the layout responds to differential request patterns.
It does not check the file system until it is ready to service the request which explains why it does not implement any form of .htaccess file. This design of interpreting requests as URI locations allows Nginx to easily act not only as a web server, but also as a proxy server, load balancer, and HTTP cache.
Also, in the Apache vs Nginx competition, NGINX once again wins in terms of transfer rate (how fast data is sent from the server to the client). In most cases, Nginx wins by a fair amount of 500/100.
Winner: It seems that Nginx wins because it interprets and responds faster.
Both are extensible through the module system. But the way they work is different. Let’s compare the functional modules of two web servers: Apache vs Nginx!
Apache
60 dynamically loadable official modules that can turn on/off the Apache server with a rich set of features that can be installed by installing one of the 60 official modules to enable these features. There are many other unofficial modules that can be easily found on the Internet.
Its module system allows you to dynamically load or unload modules to suit your needs. Its modules can be turned on or off to add or remove functionality and connect to the main server.
In short, Apache has several functional modules to meet your needs, but many of them are not used frequently.
Nginx
Third-party core modules (not dynamically loadable) On the other hand, Nginx is selected and compiled into a third-party plug-in. It cannot be loaded dynamically. These modules are useful, however, they allow you to decide what to get from the server by including only the functionality you want to use. It is considered much more secure than Apache server because arbitrary components can connect in the server. Additionally, NGINX provides all the core functionality of a web server without sacrificing the lightweight and high-performance features you need for success. Apache is like Microsoft Word and Nginx is like Notepad. Apache has a million options, but you only need a few. Nginx does "a few" of these things and does them 50 times faster than Apache.
Winner: NGiNX – It’s less important, but the features and modules make it a lighter, smarter, and better web server than Apache.
Flexibility is one of the most important issues for web servers. There are some interesting differences in Apache vs Nginx flexibility.
Apache
Supports customizing the web server through dynamic modules. The web server can be customized through the ride module. Apache's dynamic modules take the longest to load, so all Apache modules support this feature.
Nginx
is not flexible enough to support dynamic modules and loading. However, this is not the case with NGINX. In early 2016, NGINX gained support for dynamic module loading; previously, NGINX required administrators to compile modules into NGINX binaries. Most modules do not yet support dynamic loading, but over time they may. Winner: Apache – it clearly leads here.
Apache vs Nginx Security is once again a topic of debate. Well, both web servers provide excellent extended security for C-based code bases.
Apache
Very safe. Apache ensures that all websites running on its servers are safe from any harm and hacker attacks. Therefore, it provides configuration hints for DDoS attack handling, as well as the mod_evasive module for responding to HTTP DoS, DDoS or brute force attacks.
NGINX
Minimal code for better security. However, NGINX's codebase is significantly smaller by orders of magnitude, so from a forward-looking security perspective, this is definitely a big advantage. NGINX also lists recent security advisories. Read an article on defending against DDoS attacks on the Nginx blog. Winner: Nginx - It is considered more secure
Support is what every customer craves. It can change or break your user experience. When comparing Apache and Nginx support, there doesn't seem to be much difference.
Apache
Community support is done through mailing lists, IRC, and Stack Overflow. Commercial Apache support is available from many third-party companies, such as OpenLogic, but the Apache Foundation does not maintain an official list. Apache server is designed to provide powerful support to all its users.
Nginx
Community support is provided via mailing lists, IRC, Stack Overflow, and forums. The company behind NGINX offers a commercial product called NGINX Plus, which supports a set of additional features around load balancing, media streaming, and monitoring.
Winner:! The support for both is almost the same. Both web servers are great.
Neither Apache nor nginx can be replaced by the other. They have their strengths and weaknesses. After understanding the benefits, limitations, and differences, you probably already have an idea of which web server is best for you.
In our post about Apache vs. Nginx, 5 out of 9 points were won by Nginx and 2 points were “tied” between Apache and nginx. Therefore, we can clearly see that NGINX is ahead of Apache.
i) Apache.
NGINX does not support Apache-like .htaccess files. However, with Apache, you gain the advantage of letting non-privileged users control certain important aspects of their website.
Apparently, users are not allowed to edit the main configuration. System-wide settings can be overridden on a per-directory basis using .htaccess files. For best performance, include these .htaccess directives in the main configuration file. In a shared hosting environment, Apache works better due to its .htaccess configuration. P.S. For dedicated hosting or VPS Nginx remains the best option.
ii) In case of functional limitations = using Apache
Nginx has some very important core modules. However, Nginx has some functional limitations.
If there are certain limitations or you need to use additional modules that Nginx does not support, you may want to choose Apache instead.
i) Fast static content processing
Nginx can perform a better job in processing static files from specific directories.
Additionally, the upstream server process will not be blocked due to large number of static content requests because Nginx can handle them simultaneously. This significantly improves the overall performance of the backend server.
Nginx continuously strives to provide users with a better experience. In 2018, it showed significant growth. Take a look at the main takeaways from 2018 on the Nginx blog.
ii) Ideal for high traffic websites
If we talk about speed and how many clients can be served under high load, Nginx will always shine as the winner over Apache.
This makes Nginx significantly lightweight and ideal for server resources. This is why most web developers prefer Nginx over Apache.
Especially, today’s e-stores hire a Magento developer who knows how to work on high-traffic websites and is good at working on Nginx.
In short, when it comes to serving a website with a lot of traffic, there is no beating Nginx.
Use simultaneously, you can use them by combining the advantages of each server together.
You can use Nginx in front of Apache as a server proxy (as shown in the figure below). This takes advantage of Nginx's fast processing speed and ability to establish large connections simultaneously.
For static connections, Nginx will quickly serve files to the client. For dynamic content, such as Php files, the Nginx reverse proxy server will proxy their requests to Apache, which can then process its results and return its rendered page.
Nginx can then deliver the final content to the client. Additionally, it allows you to have a very functional web server that serves your clients (large numbers of users) very quickly.
The above is the detailed content of What are the differences between Nginx and Apache?. For more information, please follow other related articles on the PHP Chinese website!