Nginx vs Apache 作为反向代理,选择哪一个

mhd*_*mhd 41 nginx reverse-proxy apache-2.2

此类问题可能已在此处提出,但我找不到与我的问题真正相符的问题。听说nginx性能相当可观,但是Apache有更多文档,社区(阅读:专家)寻求帮助

现在我想知道的是,两个 Web 服务器在性能、配置的简单性、定制级别等方面的比较如何。在 vps 环境中作为反向代理服务器??

我仍在权衡两者之间的 ruby​​ web 应用程序(不是 ROR)与瘦(ruby web 服务器之一)一起使用。
具体答案将不胜感激。不触及红宝石部分的一般答案是可以的。我仍然是 Web 服务器管理方面的菜鸟。

Mar*_*ald 35

我想把它放在评论中,因为我同意 webdestroyas 答案中最重要的一点,但它有点太长了。

您处于 VPS 环境中,这意味着您的 RAM 很可能不足。仅出于这个原因,您就会需要 Nginx,因为它的内存占用比 Apaches 小。

另外,我不同意提到的一些论点。


易于配置: Nginx 并不比 Apache 难。这是不同的。如果你习惯了Apache,那么改变总是会更困难,这并不意味着配置风格本身更难。一年多前我完全从 Apache 迁移到 Nginx,今天我很难配置 Apache 服务器,而我发现 Nginx 非常容易配置。

对于Ruby:
Nginx 有Passenger,但是,我通常认为它是连接到Ruby 的劣等方法。我不是 Ruby 程序员,所以我无法验证这一点,但我经常看到提到 Unicorn 和 Thin 是更好的选择。

结论:
Nginx 被设计为反向代理。最初它所做的只是通过 HTTP/1.0 向后端服务器提供静态文件和反向代理。从那时起,fastcgi、负载平衡和各种其他功能被添加,但它最初的设计目的是为静态文件和反向代理提供服务。它做得很好。

相反,Apache 是一个通用的 Web 服务器。我毫不怀疑它可以完美地进行反向代理,但它的设计目的不是最小的内存占用,因此它比 Nginx 需要更多的资源,这意味着我最初的 VPS 环境参数开始发挥作用。


小智 9

性能:
NGinX。该服务器被认为是性能最好的 Web 服务器之一,并被许多不同的公司使用(Notable、MediaTemple)

易于配置:
Apache。Apache 的配置非常简单,而且非常强大。Nginx 功能强大,但可能很难理解,因为它看起来更像是一种编程语言而不是配置文件。

定制级别:
Apache。Apache 为它编写了大量的 mod 和其他插件。虽然 Nginx 仍然有为它制作的插件,但我认为 Apache 比 Nginx 有更多的功能。

对于 Ruby:
我知道 Nginx 可以用作 Mongrel/webrick 的强大负载均衡器。但是,Apache 具有 Phusion/Passenger,这使得集成更好。

反向代理获胜者:
NGinX

  • 我有兴趣,不争论。为什么 Nginx 是反向代理的赢家?你的其余答案并没有真正让一个人从另一个人中脱颖而出。如果有的话,它倾向于支持 Apache。 (2认同)

rma*_*ter 8

Nginx 是基于事件的,而 apache 是基于进程的。在高负载下,这让世界变得完全不同……Apache 必须为每个连接分叉或启动一个新线程,而 nginx 则不需要。这种差异主要体现在内存使用上,但也体现在用户响应时间和其他性能指标上。Nginx 可以在现代硬件上同时处理数以万计的HTTP keepalive 连接。Apache 将为每个连接使用 1-2 MB 的堆栈,因此通过数学计算您会发现您只能同时处理几百或一千个连接而无需开始交换。

我们在我们的环境中使用 Apache 和 IIS 前面的 nginx 作为负载平衡和缓存代理,并且再高兴不过了。我们使用两个小型 nginx 设备代替一对非常昂贵的租用 F5 设备,我们的站点在感觉和测量响应时间方面都快得多。