Apache vs Nginx性能:优化技术

几年前,Apache Foundation的web服务器(简单地称为“Apache”)非常普遍,以至于它成为“web服务器”一词的同义词。它在Linux系统上的守护进程的名称是httpd(意思是简单的http进程),并且在主要的Linux发行版中预先安装。

它最初于1995年发布,引用维基百科(Wikipedia)的话来说,“它在万维网最初的发展中发挥了关键作用”。根据W3techs,它仍然是最常用的web服务器软件。然而,根据过去十年的一些报告和与其他解决方案的比较,它的市场份额正在下降。Netcraft和Builtwith的报告略有不同,但都同意Apache市场份额的下降趋势和Nginx的增长。

Nginx -读作engine x -是Igor Sysoev在2004年发布的,其明确的目的是超越Apache。Nginx的网站上有一篇值得一读的文章,比较了这两种技术。起初,它主要被用来作为Apache的补充,主要用于服务于静态文件,但它市场占有率一直在稳步增长,因为它一直在发展以处理web服务器的所有任务。

它通常被用作反向代理、负载平衡器和HTTP缓存。CDNs和视频流媒体提供商使用它来构建他们的内容交付系统,其中性能至关重要。

Apache已经存在很长一段时间了,它有很多模块可供选择。Apache服务器管理是用户友好。动态模块加载允许将不同的模块编译并添加到Apache堆栈中,而无需重新编译主服务器二进制文件。通常,模块将位于Linux发行版存储库中,在通过系统包管理器安装它们之后,可以使用诸如a2enmod之类的命令将它们优雅地添加到堆栈中。Nginx还没有提供这种灵活性。当我们查看为HTTP/2设置Nginx的指南时,模块是需要在构建时配置的Nginx。

另一个促成Apache市场规则的特性是.htaccess文件。它是Apache的银弹,使它成为共享宿主环境的首选解决方案,因为它允许在目录级别控制服务器配置。Apache服务的服务器上的每个目录都可以有自己的.htaccess文件。

Nginx不仅没有相应的解决方案,而且由于性能问题而不鼓励使用这种方式。

Apache vs Nginx性能:优化技术

LiteSpeed(或LSWS)是一种具有一定灵活性的服务器竞争者,可以与Apache进行比较,同时不会牺牲性能。它支持apache风格的.htaccess、mod_security和mod_rewrite,值得共享环境考虑。它计划作为Apache的临时替代,并与cPanel和Plesk一起工作。它从2015年开始支持HTTP/2。

LiteSpeed有三个许可证等级,OpenLiteSpeed, LSWS标准和LSWS企业。Standard和Enterprise提供了一种可选的缓存解决方案,可与Varnish(相当于LSCache)相媲美,LSCache构建在服务器本身中,可以使用重写规则在.htaccess文件(每个目录)中进行控制。它还内置了一些可以减轻ddos攻击的“电池”。这一点,再加上它的事件驱动架构,使它成为一个强有力的竞争者,主要目标是面向性能的主机提供商,但它甚至值得为更小的服务器或网站设置。

硬件方面的考虑

在对系统进行优化时,我们不能过分强调对硬件设置的重视。无论我们选择哪种解决方案,拥有足够的RAM是至关重要的。当web服务器进程或PHP这样的解释器没有足够的RAM时,它们就开始交换,有效地交换意味着使用硬盘来补充RAM内存。每次访问该内存时,都会增加延迟。这将我们带到了第二点——硬盘空间。使用快速SSD存储是我们网站速度的另一个关键因素。我们还需要注意CPU的可用性,以及服务器数据中心与预期用户的物理距离。

监视

监视每个进程的当前服务器堆栈性能的一种实用方法是htop,它可以在Linux、Unix和macOS上工作,并对我们的进程进行彩色概述。

Apache vs Nginx性能:优化技术

其他的监控工具有New Relic,一个高级的解决方案,包含了一组全面的工具,还有Netdata,一个开源的解决方案,它提供了很好的扩展性,细粒度的度量和一个可定制的web仪表板,既适用于小型VPS系统,也适用于监控服务器网络。它可以通过电子邮件、Slack、pushbullet、Telegram、Twilio等发送任何应用程序或系统进程的警报。

Apache vs Nginx性能:优化技术

Monit是另一个headless的开源工具,它可以监视系统,可以配置为警告我们,或者重新启动某些进程,或者在满足某些条件时重新启动系统。

测试系统

AB—Apache Benchmark—是Apache Foundation的一个简单的负载测试工具,而Siege是另一个负载测试程序。这篇文章解释了如何同时设置它们,这里我们有一些关于AB的更高级的技巧,同时可以在这里深入了解攻城。

如果您喜欢web界面,可以使用Locust,这是一个基于python的工具,对于测试网站性能非常方便。

安装Locust之后,我们需要在目录中创建一个locustfile,我们将在该目录中启动它:

从locust导入HttpLocust,TaskSet,任务

class UserBehavior(TaskSet):

@task(1)

def index(self):

self.client.get("/")

@task(2)

def shop(self):

self.client.get("/?page_id=5")

@task(3)

def page(self):

self.client.get("/?page_id=2")

class WebsiteUser(HttpLocust):

task_set = UserBehavior

min_wait = 300

Apache vs Nginx性能:优化技术

max_wait = 3000

然后我们从命令行启动它:

locust --host=https://my-website.com

这些负载测试工具的一个警告是:它们具有DDoS攻击的效果,因此建议您将测试限制在您自己的网站上。

Tuning Apache

Apache’s mpm

(多处理模块)

Apache可以追溯到1995年和internet的早期,当时服务器的一种可接受的操作方式是在每个传入的TCP连接上生成一个新进程并对其进行应答。如果有更多的连接出现,就会创建更多的工作流程来处理它们。生成新进程的成本很高,Apache开发人员设计了一个prefork模式,并预先生成了许多进程。在每个进程(比如mod_php)中嵌入动态语言解释器的成本仍然很高,Apache的默认设置导致服务器崩溃的情况也很常见。每个进程只能处理一个传入连接。

这个模型在Apache的MPM(多处理模块)系统中称为mpm_prefork_module。根据Apache的网站,这种模式只需要很少的配置,因为它是自调节的,而且最重要的是themaxrequestworker指令足够大,可以处理预期收到的所有同时请求,但是足够小,可以确保所有进程都有足够的物理RAM。

Apache vs Nginx性能:优化技术


分享到:


相關文章: