
Apache还是Nginx?关于这个议题争论一直都没有停止过。与其在一昧地进行口水战,不如通过一些关键点进行两者的比较,帮助站长捋清思路,选择更适合的Web服务器。
本文将从多个方面,对Nginx和Apache两者进行比较,论述两者的优劣点,希望能够起到抛砖引玉之效。
众所周知,互联网于90年代开始了全球性的“征服”。整个Web协议可以概括为访问者从给定的Web站点请求文档,而DNS和IP系统将该请求转发到正确的计算机。托管请求的网页的这台服务器计算机将把网页“提供”给访问者。
网页本质上是HTML文档。为了能够向访问者提供不同的网页,网站计算器需要一个服务器程序。Nginx与Apache之类的软件可以处理请求,对其进行分析,然后将相应的文档传输至访问者的浏览器进行查看。
Nginx和Apache是当下最为流行的Web服务器,用于将网页传递到用户的浏览器:
*** 服务器是在物理服务器上运行的软件应用程序,用于处理传入的用户请求。
当你输入类似 google.com 这样的 URL 时,浏览器会向 *** 服务器发送请求, *** 服务器会存储网站运行所需的文件。
然后,服务器发送回相应的内容,无论是 、CSS、JavaScript、图像还是其他类型的内容。
*** 服务器在幕后处理许多重要任务:
既然我们已经介绍了 *** 服务器的工作原理,那么让我们来看看 NGINX 和 Apache 是如何完成这些任务的。
在互联网的头几年,蒂姆·伯纳斯·李(Tim Berners-Lee)的和之后,Apache于1995年首次发布后迅速占领了市场,并成为世界上更受欢迎的Web服务器。如今,它仍然处于该市场地位,但是主要是出于遗留原因。Apache基金会根据由Apache Foundation开发和维护。
关于Apache的命名,有两个不同的故事版本。一个版本说该名称起源于著名的美国原住民传统,而另一个版本则说该名称是“a patchy server”的一个双关语,即另外一种意思是一系列软件补丁。
Apache巨大的市场份额部分是由于它已预安装在所有主要的Linux发行版中,例如Red Hat,Centos和Ubuntu。

Ubuntu默认页面
Apache在Linux世界中的重要作用的一个例子是它的服务器进程名称是HTTPd,这使Apache成为Web服务器软件的同义词。
除了成为Web服务器市场上的之一个重要参与者之外,Apache的迅速发展还得益于其配置系统和.httaccess文件。
Apache使用.htaccess进行配置。关于如何配置,编辑和使用此文件的很多,因为它为配置Apache处理传入请求的方式提供了很大的灵活性。一些示例包括:不同的重定向规则,更大上传文件大小,URL重写,内存限制,目录保护(htpasswd),到期标头,缓存控制标头,编码标头,cookie,查询字符串操作。
Apache的主要“优点”之一是,在服务器根目录(主网站目录)中,目录树中的每个级别或目录都可以有自己的.httaccess文件,并及对应的配置。
对于共享主机来说无疑是更大的优势,因为他们可以在同一台计算机上为数百个用户提供不同的服务器规则配置,而不会影响其他网站。客户可以在受限的共享托管环境中配置许多详细信息,而独立于全局服务器配置。所以,我们大多时候可以看到虚拟主机服务器均可以配置.httaccess文件,如果服务器提供商提供权限。
如官方文档所述:
“通常,仅当您无权访问主服务器配置文件时,才应使用.htaccess文件。”
但是,这种灵活性是以牺牲性能为代价的:“ 无论您实际上是否使用它们,!”
每次启用.htaccess文件时,Apache都必须查询所有更高级别的目录树,从请求的URL或文件查询直到服务器的根目录,然后为每个请求加载它们。然后,它需要处理这些文件并针对以这种方式配置的每个目录重新配置。
使用WordPress网站,事情可能会变得非常复杂。一个典型的WordPress网站可以有来自不同目录的数百个请求。
从/wp-content/uploads/yyyy/mm类型的目录中,通常在单个页面加载中会有多个请求,通常形成不同的月份目录。然后将有/wp-content/themes/parent-theme静态资源,/wp-content/themes/child-theme资源:这些资源将包括javascript,css文件,图像。
然后还将有/wp-content/plugins,这些文件通常从数十个插件子目录中加载静态文件。对于这些资源中的每一个,Apache必须查询其整个树以查找配置。
表明,典型的WordPress设置(对于共享主机上的网站相当普遍)将包括42个单独的.htaccess执行和249个单独的.htaccess执行查询。
这只是在Web服务器级别。访问者仍然需要等待PHP流程执行整个WordPress调用堆栈以创建数据库查询,并将其提供给MySQL以组装网页并将其发送给访问者。
使Apache流行的另一个原因是它的动态模块系统。
Nginx和Apache中都存在模块(作为允许用户扩展Web服务器功能的功能)。一旦Web服务器已经安装和部署,Apache便允许用户安装模块,然后根据需要启用/禁用它们。基于Debian的发行版的命令允许启用和禁用这些模块,而无需编辑任何配置文件:a2enmod和a2di *** od。
作为Apache标准发行版的一部分的,其中包括压缩,加密,日志记录,重定向到更高级的内容,例如使用高级语法编辑请求和响应。
优点
缺点
(也称为nginx或NGINX)于2004年出现,由俄罗斯开发人员首次公开发行。
正如Nginx的项目经理:
“ Nginx是专门为解决Apache Web服务器的性能限制而编写的。”
该服务器于2002年首次创建,作为rambler.ru网站的扩展工具。它有两个版本:具有的开源版本和提供企业支持和附加功能的。
Nginx发布后,主要用于提供静态文件,并在Apache安装之前用作负载均衡器或反向 *** 。随着 *** 的发展以及对速度极致追求,硬件使用效率需求,越来越多的网站开始使用Nginx完全替换Apache。当然这也要归功于Nginx开始变得更加成熟和稳定。

NGINX Inc被F5 Networks收购
2019年3月,Nginx Inc。当时,正如Techcrunch报道的那样,Nginx服务器正在为“3.75亿个网站包括约1,500个付费客户”提供服务。
根据,Nginx的市场份额一直在稳定增长,从数据表上看,感觉NG从一开始就在蚕食Apache的市场份额:

Web服务器市场占有率
这些数据涉及全球范围内的Web服务器,但是如果我们从前一百万个网站中抽取样本,则发现Nginx已经超越Apache:

使用Nginx的网站百分比
Google搜索趋势似乎也反映了这一事实:

Google搜索趋势:Nginx与Apache
表明,Apache已于2019年4月被Nginx超越。
Nginx没有像Apache这样的配置系统,这也是为什么尽管它效率更高,速度更快,但并未广泛地用于虚拟主机提供商。它在共享环境中不像Apache那样发光。

服务器架构图
另一方面,不允许目录级别的配置,Nginx相对于Apache获得了显着优势。上有一篇文章关于NG和Apache的性能比较:

Nginx vs Apache性能对比
Nginx模块系统定位为更高级选择。Nginx模块通常需要在构建时启用,这意味着需要更多的技术,并且在安装后添加模块会更加复杂。
在2016年的1.9.11版中,,官方或者经过验证的动态模块存储库保留给付费用户。从2019年5月开始,他们宣布开始开发。
优点
缺点
服务器软件的架构是指其内部机制和布局,这些机制和布局决定了服务器软件如何处理连接、 *** 请求和用户流量。将 Apache 和 NGINX 的架构想象成汽车引擎的内部结构,以及每个组件如何帮助它们提供更佳服务。
Apache
如前所述,Apache 默认使用进程驱动架构,由一个线程处理每个连接请求–线程是调度程序所能处理的最短指令流。
不过,Apache 也有一些潜在的缺点。严重的资源消耗和缺乏对异步处理的支持会降低服务器的运行速度,增加页面加载时间,有时甚至会导致网站中断。
Apache 使用多处理模块(MPM)巧妙地解决了这些问题,MPM 接受并响应服务器请求。作为用户,您可以从三个主要 MPM 中任选一个来优化服务器,但一次只能加载一个 MPM。
Apache 2.4 中的 MPM 包括
NGINX
NGINX 的架构是异步和事件驱动的,这意味着它可以在单个进程内同时处理多个连接。它通过运行一个控制器进程和多个子进程来实现这一功能。
这种架构使 NGINX 成为可扩展性的理想选择,因为即使在低功耗系统上,它也能有效地将客户端请求分配给各个进程。
控制器进程执行读取和解释配置文件、绑定端口以及组建子进程等高级操作。
子进程对 NGINX 的运行至关重要,它们可分为三类:
如果你的网站(如电子商务商店或云存储服务)流量很大,NGINX 可能是你的更佳选择。
虽然 Apache 有支持多进程的多处理模块,但 NGINX 的异步事件驱动架构更胜一筹。NGINX 更适合高流量和可扩展性。不过,Apache 的架构意味着它可以处理需要更多兼容性的稳定项目。
接下来是 NGINX 和 Apache 在内容交付(即动态和静态内容交付)方面的性能比较。动态内容会根据用户的行为、兴趣和选择而改变。而静态内容则是不做任何修改直接向网页提供。
Apache
Apache 使用基于文件的 *** 提供静态内容,这是任何 MPM 都能提供的功能。除此之外,它还是一款出色的动态内容交付服务器软件。它只依赖其内部组件,并在每个 Worker 实例中集成了一个独特的编程语言处理器。
您可以使用 Apache 的可加载模块激活每个模块中的语言处理器。这样,Apache 服务器就可以在服务器内运行动态内容,而无需外部软件支持。
NGINX
NGINX 采用异步架构,比 Apache 提供静态文件的速度更快。这使它成为静态网页内容的理想服务器软件。然而,在传输动态内容时,它就显得力不从心了。
由于 NGINX 没有处理动态内容的内置功能,它将使用外部进程来执行。它必须等待外部软件处理并返回解码后的内容,然后再将其发送回浏览器。这意味着对管理员配置的要求更高。
缓存问题:Nginx与Apache
缓存可以看作是在网站访问者访问之前为他们准备内容,这样当他们“敲门”时,您无需去寻找他们想要的内容。因为已经准备好了,无需等待就将其交给他们。
像Apache一样,Nginx的典型设置曾经是放置在服务器和最终用户之间,以减轻对基础架构其余部分的性能影响。在这种情况下,它可以缓存静态内容,而无需每次都从受保护的原始服务器获取静态内容。
如果我们将Nginx用作独立的Web服务器,则没有这种需求。Nginx可以非常有效地自行提供静态内容。
然后是动态缓存或页面缓存的问题。以WordPress网站为例,这意味着将为每个URL生成的所有WordPress页面存储在内存或磁盘中。
在标准的Nginx安装中,即本地可用。它简单,功能强大,但不是常用的Nginx功能之一。
要将其与Apache等效项进行比较,您应该知道Apache拥有mod_cache模块,该模块容易产生与其他模块冲突的小故障。因此,与Apache一起部署的标准缓存解决方案是Varnish HTTP加速器。尽管Varnish是专用的行业解决方案,但最近的一些测试表明。
参考阅读:
处理请求:Nginx与Apache
Apache和Nginx之间更大的区别在于它们处理请求的基础架构。
Apache处理请求方式
Apache使用MPM或处理请求,这是“负责绑定到计算机上的 *** 端口,接受请求并分派子进程来处理请求”。
最早的MPM可以追溯到Apache的最开始,它是。仅此模块就可以归因于Apache的性能不良声誉。在这种模式下,Apache会在每个请求中产生一个线程的新进程。
该模块与mod_php一起使用,意味着Apache服务器在每个进程中都嵌入了一个PHP解释器,即使它必须提供CSS文件或图像也是如此。
这是低效的。Prefork模块是Apache附带的默认模块。它还将连接限制为HTTP/1。
在后来的几年中,Apache开发了多线程,之后又开发了。它们都减轻了许多Apache的性能问题。切换到php-fpm使得Apache仍然可以成为当今的竞争解决方案,同时消除了对.htaccess的使用,但是这种做法违背了它的目的。
Nginx处理请求方式
Nginx使用异步,非阻塞事件驱动的体系结构。
解释差异:在Linux/Unix世界中,进程即运行程序(processes are running programs)。
线程是进程的子集,一个进程执行中可以有多个线程。可以将其视为浏览器窗口中的多个选项卡。这样,程序可以利用多个CPU和多核,多线程CPU来更快地执行。您可以阅读。
简而言之,Apache对每个连接使用进程(对于worker mpm,它使用线程)。随着流量的增加,这显然太奢侈了。
我们可以描述新的过程或线程创建,例如启动计算机或启动程序。即使在最快的计算机上,在单个页面上加载数百个请求,它仍然需要一些时间。
事件mpm在优化方面走得更远,但是表明它不能超过Nginx。尤其是当我们谈论静态文件时,Nginx的服务量是Apache的两倍。
Nginx理想情况下,每个CPU/内核只有一个工作进程。Nginx工作进程的区别在于,每个工作进程的,而无需为每个连接创建新的线程或进程。
这就是为什么主流的CDN服务器商(例如,或这样的网站)均采用Nginx,因为它对内容分发工作的处理效率更高。参考阅读:
使用Nginx作为Web服务器的公司实在太多太多,无法一一列举。
即时WordPress.com旗下的Automattic在2008年将所有负载均衡器都转换为Nginx(),并将其服务器堆栈完全。
Apache 和 NGINX 在传输静态内容时都很出色,但 Apache 是传输动态内容的理想选择。NGINX 本身并不处理动态内容,可能需要一个外部处理器来处理它能适应的协议。
在 Apache 和 NGINX 之间做出选择时,安全性是另一个重要的考虑因素。这两种服务器系统都很安全,但它们处理安全问题的方式不同。
Apache
多年来,Apache 一直是 HTTPD 服务器连接的安全软件。不过,您仍然可以对服务器进行配置,以提高安全性。
Apache 使用三种配置设置来挫败拒绝服务()攻击:
NGINX
NGINX 开箱即提供速率限制功能,可管理传入请求的速率。如果速率值超过或低于典型的浏览器活动,NGINX 就会中断连接。其独特的架构还能保护上游服务器免受过多请求(分布式拒绝服务(DDoS)攻击的症状)的影响。
您还可以对 NGINX 进行配置,拒绝特定 IP 地址、带宽和子请求的访问。此外,NGINX 还支持传输层安全(tlS)和安 *** 接字层(SSL)协议。
Apache 和 NGINX 都能提供卓越的安全功能,满足您的需求。不过,您可能需要额外的安全措施来保护网站免受恶意攻击。
在设置服务器软件时,您会注意到 Apache 和 NGINX 模块系统之间的重要区别。
Apache

Apache 有多个可动态加载的模块,您可以在需要时激活。这些 Apache 模块适用于多种任务,包括设置环境变量、重写 URL 和定义过期时间间隔。
您可以在 .htaccess 文件中设置更多的目录级配置。这些文件允许你在不影响其他区域的情况下配置服务器中的目录。
文件的好处是,服务器执行这些文件时不需要重新加载服务器,而且只要这些文件位于请求路径上,就会被解释。此外,非特权用户可以控制特定的网站元素,而无需控制完整的配置文件。
许多托管服务提供商使用 Apache,因为他们可以保持对主要配置的控制,甚至可以让客户控制目录。
NGINX

与 Apache 不同,NGINX 不解释 .htaccess 文件,也不提供访问和配置每个目录文件的其他 *** 。
相反,所有设置都在主配置文件中提供。虽然这使得 NGINX 的灵活性降低,但却带来了速度上的优势。
NGINX 还配备了额外的第三方模块,可进一步增强其功能。中级和高级用户也可以构建自己的模块。与 Apache 不同,除非购买企业版,否则 NGINX 不支持动态模块。否则,必须使用免费的 NGINX 版本编译命令后才能执行。
Apache 更灵活;你可以使用 .htaccess 文件对其进行配置。这样就可以将目录与服务器的其他文件分开配置。NGINX 没有 Apache 灵活,但它比 Apache 更快、更高效。
在选择主机时,技术支持是一个重要的考虑因素。在选择系统之前,必须了解你所选择的服务器软件是否能为性能优化提供可靠的支持。
Apache

Apache 拥有涵盖其所有关键方面的信息和文档库。Apache 网站提供发布说明、手册、指南、教程和其他信息,可以帮助您更好地使用 Apache。
此外,您还可以访问 Stack Overflow 和 Freenode IRC *** 上的社区,其他用户可以帮助您解决常见问题。
NGINX
还有很多社区论坛涉及 NGINX 问题,开发人员在这些论坛上为新老用户提供建议和技巧。他们的网站上就有这样一个论坛,但在社交媒体和互联网上还有许多其他论坛。

NGINX 还在其网站上提供大量学习资源,包括文档、 *** 研讨会、数据表和博客文章。您还可以通过即时聊天获得 NGINX 团队的专门支持。客户支持团队可以帮助您进行安装设置或排除故障。
NGINX 和 Apache 提供多种支持选项,可帮助您解决有关服务器的任何问题。但与 Apache 不同的是,NGINX 团队提供即时聊天,这对于需要直接互动来部署或安装 NGINX 软件的用户来说是一个有用的工具。
如果我们要检查网站使用了什么Web服务器,通常可以在HTTP响应标头中找到它。右键单击一个网站>开发者工具Inspect,在开发人员工具中,我们将选择Network *** 面板,然后重新加载该网站。我们将看到网站正在加载的所有资源。如果选择任何特定资源及其“Header”选项卡,通常将看到服务器信息。如果网站使用CDN,则在服务器行中我们可能会看到类似Cloudflare的内容,如果网站使用HTTP加速器,我们可能会看到类似Varnish的内容。
这是一个WordPress网站的示例,该网站使用典型的共享主机设置以及cPanel,Apache和PHP:

Apache服务器网站HTTP标头
这是使用Nginx作为Web服务器的网站:

Nginx服务器网站HTTP标头
在左侧,如果我们对其进行扩展,还可以分析每个资源的时间,并查看其对整个页面加载时间的影响。
对于 NGINX 与 Apache 之争,没有一个放之四海而皆准的答案。不过,这里有一些好的经验法则,可以帮助你做出决定。
如果出现以下情况,NGINX 会更好
如果出现以下情况,Apache 会更好
没有规定说你必须选择一个。
在 Apache 前面运行 NGINX 作为反向 *** 是很常见的。这样,您就可以将 NGINX 无与伦比的静态文件服务和并发处理功能与 Apache 在后端丰富的动态语言支持结合起来–两全其美。
在本文中,重点介绍了Nginx与Apache,并解释了主要的体系结构差异,在很多方面Nginx表现出其独特的优势,尤其在WordPress方面,Nginx在很大程度上实现极致的服务器优化支持。
当然,并非每个用例都具有相同的优先级,Apache或其他工具(例如,,,可能是不错的解决方案。
也就是说,没有更好的Web服务器,只有最合适的Web服务器。本文只是,在有限的方面,指出Nginx的优势特征,以帮助站长选择更合适自己的Web服务器。
宝塔面板设置主要涉及的是宝塔控制后台自身的参数,包括诸如面板的开关、自动更新及SSL、面板端口设置等。虽然这部分不涉及服务器自身的管理,但对宝塔面板的设置也有其重要。 特别是面板端口、安全入口及面板密码等涉及安全的参数设置。 启动和关闭面板 如果你长时间无需使用到宝塔面板,可以考虑...
对于初学者和那些刚刚进入WordPress开发的人来说,PHP是您可以开始的最佳起点之一。这是一种超级简单直接的语言,使其成为之一,因此相当容易上手,它构成了在线开发的支柱。另外,如果你想在WordPress后端工作,你肯定需要学习它。 但是,如果您不想在昂贵的大学课程上花费数月或数年时间怎么...
Node.js和PHP是Web开发工作中常用的两种基本Web技术。两者都为服务器端开发做出了贡献,Node.js甚至同时服务于客户端和服务器端开发。 PHP已经为开发人员服务了近3年,现在它为78%的网络提供支持。相比之下,Node.js相对较新,但扩展速度非常快,由于其全栈开发能力而成为流行...
有时似乎有太多的商业首字母缩写词要记住。随着快速变化的技术进步和云计算的出现,新的类别将不断涌现。XaaS 就是这样一个最新的补充。 该领域的大多数读者都知道、和。但是你听说过XaaS吗? XaaS(一切皆服务)涵盖了一切:现在一切都可以成为服务。 这听起来好像很复杂的样子,但别担心——我...
薪水可能是某些人的禁忌话题,但如果您是WordPress开发人员,或者正在考虑从事WordPress开发工作,那么了解人们的收入对于最大化您自己的赚钱能力至关重要。 所以让我们谈谈这个秘密——让我们谈谈WordPress开发人员的平均工资。这样,您将确切地知道自己的价值(以及如何赚取更多)。...
SaaS、IaaS和PaaS这三个术语几乎可以互换使用——尽管它们根本不能互换。那么它们之间有什么区别呢? 虽然您可能听说过软件即服务 (SaaS),但IaaS和PaaS在特定技术社区之外鲜为人知。分别是基础架构即服务和平台即服务的缩写,这些工具以及SaaS都通过云交付资源。然而,正是交付的资...