Nginx和Apache一样,都是HTTP服务器软件,在功能实现上都采用模块化结构设计,都支持通用的语言接口,如PHP、Perl、Python等,同时还支持正向和反向代理、虚拟主机、URL重写、压缩传输、SSL加密传输等。
Apache 和 NGINX 的主要区别在于其设计架构。Apache 使用进程驱动的方法,并为每个请求创建一个新线程。NGINX 使用事件驱动的体系结构来处理一个线程中的多个请求。
Apache HTTP 服务器是一种开源跨平台 Web 服务器,也称为”httpd”和 Apache。他是Apache 软件基金会管理其品牌和服务。服务器由 ASF 下的开放开发人员社区开发和维护。Apache 主要运行在 Linux 上,它支持全球 46% 的网站。它是 LAMP(Linux、Apache、MySQL、PHP)堆栈的关键组件。
什么是NGINX?发音为? 它的发音是 “Engine X” 它是伊戈尔·西索耶夫在 2004 年发布的 Web 服务器。今天,它不仅仅是一个网络服务器!起初,人们大多使用 Nginx 作为Apache的补充.它主要用于提供静态文件,但今天,它已演变为一个完整的Web服务器,处理整个web服务器任务。Nginx 经常用作反向代理、负载均衡器、邮件代理和 HTTP 缓存。Apache和Nginx都是Linux最常见的网络服务器。它们共同为网络流量的 50%以上提供服务。
虽然阿帕奇和NGINX有许多共同的品质,但在许多方面是不同的。每个都以自己的方式出类拔萃,并有自己的用途和方案。为了了解差异并得出结论,让我们通过下面的详细、端到端的比较。我们还提到每个点结束时每个比较点的优胜者。
当谈到Apache 和Nginx 时,根本区别在于他们的设计架构。这意味着它们的实际处理连接和流量以及响应不同的流量条件的方式不同。一种是过程驱动的方法,另一个是事件驱动的体系结构。
Apache
流程驱动方法,为每个请求创建一个新线程。Apache 采用多线程方法。它提供各种多个处理模块。这些预模块基本上是三种类型的请求处理算法。每个都用于不同的服务器需求。MM(多处理模块)提供了一个灵活的架构,用于选择不同的连接和不同的处理算法。此外,不同版本的 Apache 2 采用不同的游行模块。三个主要的 Apache MM 是:过程(预叉) MPM、工人 MPM、事件 MPM 。默认情况下,Apache 2.2 配置为预叉模式(mpm_prefork)。它响应一组进程,每个进程一次可以处理单个请求。换句话说,Apache 每次都会创建一个新线程来处理每个连接请求。线程是可由调度程序独立管理的最小编程指令序列。在大多数情况下,线程是进程的组件。但是,Apache 的基本体系结构可能导致大量资源消耗,因此,可能会导致服务器的问题(例如速度慢)。
事件驱动方法,在一个线程内处理多个请求,Nginx 使用事件驱动的体系结构,并异步处理请求。它旨在使用非阻塞事件驱动连接处理算法。因此,其进程可以在一个处理线程中处理数千个连接(请求)。这种连接过程模块使 Nginx 能够以有限的资源快速、宽工作。此外,您还可以在低功耗系统上和在重负载下运行的系统上使用 Nginx。
赢家是 NGiNX – 它的结构轻量级,架构比 Apache 快得多。性能以 Apache vs Nginx 来说,两个 Web 服务器对静态和动态内容处理方式都不同。他们说 Nginx 在处理静态内容时更好, 让我们看看这是真的!
Apache
使用基于文件的方法提供静态内容,静态内容或文件通常是存储在服务器计算机上磁盘上的文件,例如 CSS 文件、JavaScripts 文件或图像。Apache 使用其传统的基于文件的方法处理静态内容。
Nginx
在提供静态内容时, Nginx 是大哥。由于 Nginx 的设计架构更有能力处理负载,因此在提供静态内容方面速度要快得多。根据高达 1,000 个同时连接的基准测试,其性能比 Apache 快 2.5 倍。Nginx 为静态资源服务,而 PHP 无需了解这一点。另一方面,Apache 以昂贵的开销处理所有这些请求。这使得 Nginx 更加有效,对系统资源的要求更低。
这个小图像显示的是静态内容请求,以秒处理。Nginx 显然在这里超过了Apache!
Apache
Apache 可以在 Web 服务器本身中处理动态内容,而无需依赖任何外部组件。所以,它可以处理你的本身。谈论 Apache vs Nginx 性能:在考虑动态内容处理时,Nginx(如果不是更好的话)几乎相等。下面是对动态内容请求数的比较。貌上没什么区别。
Nginx
它不处理动态内容,谈到动态内容,Nginx 无法像 Apache 那样在 Web 服务器中处理动态内容。所有具有动态网页内容的请求都传递到外部进程(例如 PHP-FPM)执行。Nginx 等待最终内容返回并交付给客户端。有关清晰想法,请参阅此图像:
当与 SCGI 处理程序和 FastCGI 模块一起使用时,NGINX 可以为动态内容提供服务。静态:就静态内容而言,Nginx 完胜 Apache。动态:两者都擅长处理动态内容。
操作系统支持可能是需要考虑的重要一点,尤其是在比较 Apache 与 Nginx 时。但是,他们两个几乎相似在这里。
Apache
支持所有与 Unix 一样的系统,包括 Linux 和 BSD。它完全支持 MS-WindowsApache 运行在各种与 Unix 一样的系统(例如 Linux 或 BSD)上运行,并且完全支持微软 Windows。
Nginx
支持几乎所有与 Unix 一样操作系统。部分支持 Windows。它还在几个现代 Unix 的系统上运行,并且对 Windows 有一些支持,但其 Windows 性能不像其他平台那样强大。
赢家是Apache在这里获胜。
阿帕奇 vs Nginx 是一个当之无愧的话题。他们的配置使他们彼此不同,使他们同样有趣。让我们看看谁的配置更容易、更快。
Apache
通过 .htaccess 文件允许基于每个目录进行其他配置。此体系结构允许非特权用户控制其网站的某些方面,而无需授予他们编辑主配置的权限。这个很大!
Nginx
不允许进行其他配置另一方面,它有一个缺点。它不提供其他配置。然而,它有利于你,因为这增加了性能。通过不允许目录配置,它可以比 Apache 更快地提供请求。它不需要搜索 .htaccess 文件并解释用户制作的 req。
赢家:如果考虑配置,可进行 Apache;如果考虑了配置,可进行 APache。如果速度是 NGinx。
在 Apache vs Nginx 辩论中,解释请求的方法是一个有趣的话题进行比较。它们都以完全不同的方式处理和解释请求。
他们不同的方法使他们独特,也使一个比另一个更好一点。让我们来探索一下!
Apache
传递文件系统位置,提供解释要求的能力。作为文件系统位置的物理资源,可能需要更抽象的评估。它将请求作为文件系统位置传递。
当然,Apache 确实使用 URI 位置,但它们通常用于更抽象的资源。在创建或配置虚拟主机时,Apache 使用文档根目录下的目录块。
在使用 .htaccess 文件覆盖特定目录配置时,也可以看到对文件系统位置的这种偏好。
Nginx
通过 URI 来解释请求,Nginx 被创建为 Web 服务器和反向代理服务器。由于这些架构的要求,Nginx主要使用你的眼睛。必要时转换为系统。它不提供指定配置的机制。对于文件系统目录,则传递其 URI 本身。将请求(URI)而不是文件系统位置传递,使Nginx能够轻松地在 Web 和代理服务器中运行。它通过布局如何响应差异请求模式来简单配置。
它不会检查文件系统,直到它准备好服务的请求它解释了为什么它不实现任何形式的.htaccess文件。这种将请求解释为 URI 位置的设计使 Nginx 不仅能够轻松地充当 Web 服务器,还能够用作代理服务器、负载均衡器和 HTTP 缓存。
此外,在 Apache vs Nginx 竞赛中,NGINX 在传输速率(数据从服务器发送到客户端的速度)方面再次获胜。在大多数情况下,Nginx 以 500/100 的公平金额获胜。
赢家:似乎Nginx赢了, 因为它的解释和反应更快。
两者都是通过模块系统可扩展的。但他们的工作方式是不同的。让我们比较两个 Web 服务器的功能模块: Apache vs Nginx!
Apache
60 个可动态加载的官方模块,可打开/关闭Apache 服务器具有一组丰富的功能,可以通过安装 60 个官方模块之一来启用这些功能。还有许多其他非官方的模块,可以很容易地在互联网上找到。
其模块系统允许您动态加载或卸载模块,以满足您的需求。其模块可以打开或关闭以添加或删除功能,并连接到主服务器。
简而言之,Apache 有几个功能模块可满足您的需求,但许多模块并不经常使用。
Nginx
第三方核心模块(不可动态加载)另一方面,Nginx被挑选并编译为第三方插件的过程。不可动态加载。这些模块很有用,但是,它们允许您仅包括要使用的功能来决定从服务器获得什么内容。它被认为比 Apache 服务器安全得多,因为任意组件可以在服务器中连接。此外,NGINX 还提供 Web 服务器的所有核心功能,而不会牺牲成功所需的轻量级和高性能特性。Apache 就像微软 Word,Nginx 就像记事本。Apache 有一百万个选项,但你只需要几个。Nginx 做这些 “几个” 的事情, 做他们比阿帕奇快 50 倍。
赢家:NGiNX – 它不太重要,但功能和模块使它比 Apache 更轻、更智能、更好的 Web 服务器。
灵活性是 Web 服务器最重要的问题之一。Apache vs Nginx 灵活性有一些有趣的差异。
Apache
支持通过动态模块自定义 Web 服务器。可以通过骑乘模块对 Web 服务器进行自定义。Apache 的动态模块加载时间最长,因此所有 Apache 模块都支持此功能。
Nginx
不够灵活,无法支持动态模块和加载。然而,NGINX的情况并非如此。2016 年初,NGINX 获得动态模块加载支持;以前,NGINX 要求管理员将模块编译为 NGINX 二进制文件。大多数模块尚不支持动态加载,但随着时间的推移,它们可能会支持动态加载。赢家:Apache – 它显然在这一点上领先。
Apache vs Nginx 安全性再次成为争论的话题。嗯,这两个 Web 服务器都为基于 C 的代码库提供了出色的扩展安全性。
Apache
非常安全。Apache 确保所有在其服务器上运行的网站都是安全的,不会受到任何伤害和黑客攻击。因此,它提供了用于 DDoS 攻击处理的配置提示,以及用于响应 HTTP DoS、DDoS 或暴力攻击的 mod_evasive 模块。
NGINX
最少的代码实现更好的安全。然而,NGINX的代码库明显小了几个数量级,所以从前瞻性的安全角度来看,这绝对是一个很大的优势。NGINX还列出了最近的安全建议。在Nginx博客上阅读一篇关于抵御DDoS攻击的文章。赢家:Nginx–它被认为更安全
支持是每个客户都渴望得到的。它可以改变或破坏你的用户体验。在比较Apache和Nginx支持时,似乎没有太大区别。
Apache
社区支持通过邮件列表、IRC和堆栈溢出完成。商业Apache支持可以从许多第三方公司获得,比如OpenLogic,但是Apache基金会没有维护官方列表。Apache服务器旨在为其所有用户提供强大的支持。
Nginx
通过邮件列表、IRC、堆栈溢出和论坛提供社区支持。NGINX 背后的公司提供名为 NGINX Plus 的商业产品,该产品支持一组有关负载平衡、媒体流和监控的额外功能。
赢家:!两者的支持几乎相同。两个 Web 服务器都很棒。
Apache和nginx都无法被对方取代, 他们有他们的强弱。在了解好处、限制和差异之后,您可能已经拥有了最适合您的 Web 服务器的想法。
在我们关于Apache对 Nginx 的帖子中, 9分中的5分被 Nginx 赢得, 2 分被Apache和nginx “平局” 。因此,我们可以清楚地看到,NGINX领先Apache。
i) 阿帕奇.
NGINX 不支持类似 Apache 的.htaccess 文件。但是,使用 Apache,您可以获得优势,让非特权用户控制其网站的某些重要方面。
显然,用户不允许编辑主配置。使用 .htaccess 文件,可以基于每个目录覆盖系统范围的设置。为了获得最佳性能,请将这些 .htaccess 指令包括在主配置文件中。在共享托管环境中,Apache 由于其 .htaccess 配置而效果更好。P.S.对于专用主机或VPS Nginx保持最好的选择。
ii) 在功能限制的情况下 = 使用 Apache
Nginx 有一些非常重要的核心模块。然而, Nginx 有一些功能限制。
如果存在某些限制或需要使用 Nginx 不支持的额外模块,则可能需要选择 Apache 代替。
i) 快速静态内容处理
Nginx 在处理来自特定目录的静态文件方面可以执行更好的工作。
此外,上游服务器进程不会被阻止,因为大量静态内容请求,因为 Nginx 可以同时处理它们。这显著提高了后端服务器的整体性能。
Nginx 不断努力为用户提供更好的体验。2018年,它显示出了显著的增长。在 Nginx博客上浏览一下 2018年的主要要点。
ii) 非常适合高流量网站
如果我们谈论的速度和多少客户可以服务在高负载,Nginx将永远闪耀作为赢家超过阿帕奇。
这使得 Nginx 具有显著轻量级,非常适合服务器资源。这就是为什么大多数 Web 开发人员更喜欢 Nginx 而不是 Apache。
特别是,如今的电子商店雇佣了一位Magento开发者,他们知道如何在高流量的网站上工作,并擅长在Nginx上工作。
简言之,当涉及到服务一个有大量的流量的网站,有没有击败Nginx。
同时使用,通过将每个服务器的优势一起使用,可以使用它们。
您可以将 Apache 前面的 Nginx 用作服务器代理(如下图所示)。这利用了 Nginx 的快速处理速度和同时建立大无连接的能力。
对于静态连接,Nginx 会将文件快速服务到客户端。对于动态内容,例如 Php 文件,Nginx 反向代理服务器会将他们的请求代理到 Apache,然后 Apache 可以处理其结果并返回其呈现的页面。
然后,Nginx 可以将最终内容传递给客户端。此外,它允许您有一个非常实用的网络服务器,以服务您的客户(大量用户)非常快。
以上是Nginx和Apache区别有哪些的详细内容。更多信息请关注PHP中文网其他相关文章!