就目前的形势来看,互联网与Apache之间的甜蜜感情似乎已经破碎,这意味着在过去十几年中始终统治这片大陆的王者终于开始显露疲态。尽管Apache仍然支撑着全球大部分网站,但在过去几年中Nginx(engine-x)正不断蚕食着前者的市场份额。
凭借着其事件驱动设计,Nginx已经超越了Apache的过程驱动设计、成为更适合当前计算机硬件状况的高人气解决方案。从结果角度讲,特定情况下Nginx能够在同样的硬件之上实现超越Apache的并发客户支持数量与更高的数据吞吐能力。但大家不应该单纯将此作为评判标准,我们还应该考虑自己到底在利用服务器设备做些什么。
Nginx在处理静态内容时拥有优势,其执行效率比Apache更高,但Apache的静态内容处理速度同样不慢。静态内容对于任何一种Web服务器来说都是最简单的处理项目,因此高流量站点往往倾向于利用更加复杂的后端系统来生成静态内容,从而更快且更全面地满足用户需求。不过PHP的介入给这一流程带来了更多难题。
最重要的问题在于,当我们选择一套Web服务器设置方案时,最重要的问题是搞清楚自己会如何使用这台服务器。如果大家只需要用它来支持单一站点,而且这台服务器中运行着一套专门充当web服务器的独立数据库系统,那么选择Nginx无疑更加明智——毕竟Nginx在流量处理能力上要高于Apache。除此之外,Nginx本身提供配置功能,从而在必要时以比Apache更简单的方式实现规模扩展,这又是另一项优势。不过如果大家打算在这台服务器中托管多个站点以及大量应用程序,例如多个Wordpress站点,那么答案就没那么明确了。在这种情况下,性能瓶颈可能更多来自PHP而非web服务器的具体选择。
面对这种情况,大家可能会这样考虑:好吧,如果PHP对于这两类web服务器都是难题,而且Nginx在处理静态文件时速度更快,为什么不直接选择Nginx呢?之所以令人纠结,是因为Apache拥有属于自己的独特优势。这是一套成熟的平台,而且在Linux领域拥有相当广泛的支持方案。很多在Apache中可以直接使用的功能,在Nginx这边也许需要大家经过认真研究与配置。不少控制平台与自动化配置工具目前在Nginx当中还不可用,大家的技术团队可能也更熟悉Apache并擅长诊断其中出现的问题。这些都是需要认真考量的重要优势。
在大多数情况下,Nginx所带来的性能提升其实都可以忽略不计。除非需要托管数以十亿计的海量站点,否则流量优势基本上很难得到体现。大家应该将实际要求与现有技能储备作为主要参考因素。如果我们希望在自己的个人博客上使用一项新技术作为学习实践,那么选择任何一套喜欢的平台都是没有问题的。如果大家要设置的是一台托管服务器或者关键性业务应用程序,那么审视选项时则最好慎重一些。仅仅出于速度的考虑就将所有工作一股脑交给Nginx,这样的判断方式显然很容易引发严重后果。
最后,最好的处理策略在于将不同技术结合起来,而非简单依赖单一一种web服务器平台。需要处理大量流量的站点要求在架构中引入多层机制,而web服务器仅仅是这套综合性体系当中的一小部分。多数普通站点应该优先考虑技术人员更熟悉的解决方案,并对需要重视的特定类型性能表现作出横向比较。Apache仍然是一套出色的引擎,而且保持着较高的人气。随着不断发展与成熟,Nginx也将逐步完善、甚至在未来五年内一举超越Apache。
要在二者之间作出选择,正确的答案是视情况而定。如果大家打算托管Wordpress这类非常常见的站点场景,我认为这两套方案都能带来卓越的表现。利用Nginx对站点内容进行缓存处理(建议大家这样做)能够实现性能改进,但这也意味着需要牺牲Apache在开箱即用、兼容性以及低难度学习曲线方面的优势。如果大家需要运行PHP应用程序,那么使用APC等操作码缓存机制带来的提升要远高于在两种web服务器之间纠结。我的观点是,Nginx并不是一味包治百病的灵药。仅仅因为Apache年事已高、不像新生代Nginx那么酷而轻易作出选择往往会最终令自己陷入困境。