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

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

这类问题可能有人在这里问过,但我找不到真正符合我的问题的。听说 nginx 的性能相当令人印象深刻,但 Apache 有更多文档、社区(阅读:专家)来获得帮助

现在我想知道,这两个 Web 服务器在性能、配置难易程度、定制级别等方面相比如何。作为 VPS 环境中的反向代理服务器??

我仍在权衡两者,是否要使用 Thin(Ruby Web 服务器之一)来提供 Ruby Web 应用程序(不是 ROR)。如能提供
具体答案,我将不胜感激。一般答案不涉及 Ruby 部分即可。我仍是 Web 服务器管理方面的新手。

答案1

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

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

我也不同意所提到的一些论点。

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

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

综上所述:
Nginx 被设计为一个反向代理。最初它所做的只是通过 HTTP/1.0 为后端服务器提供静态文件和反向代理。此后,它添加了 fastcgi、负载平衡和各种其他功能,但它最初的设计目的是提供静态文件和反向代理。而且它在这方面做得非常好。

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

答案2

表现:
NGinX。该服务器被认为是性能最好的 Web 服务器之一,被许多不同的公司使用(值得注意的是,MediaTemple)

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

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

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

反向代理获胜者:
NGinX

答案3

Nginx 是基于事件的,而 Apache 是基于进程的。在高负载下,这会产生天壤之别……Apache 必须为每个连接分叉或启动一个新线程,而 nginx 则不需要。这种差异主要体现在内存使用量上,但也体现在用户响应时间和其他性能指标上。Nginx 可以处理数以万计的同时现代硬件上的 HTTP 保持连接。Apache 将为每个连接使用 1-2 MB 的堆栈,因此计算后您会发现,如果不开始交换,您只能同时处理几百个甚至一千个连接。

我们在环境中使用 nginx 作为 Apache 和 IIS 的负载平衡和缓存代理,结果非常令人满意。我们使用两个小型 nginx 盒代替一对非常昂贵的租用 F5 设备,我们的网站在感觉和测量响应时间方面都快得多。

答案4

大约两周前,我和您面临同样的困境。

给你一个非常简洁的答案:根据我的研究,nginx 确实非常快并且资源友好,但它只被设想用于反向代理静态文件。其余的都是附加解决方案,你必须配置或编写脚本。

据我所知,nginx 没有 htaccess 文件,所以如果依赖该功能,你必须找到解决方法。

据我所知,所有需要的工作都已完成,并且我已经看过教程。

我将使用 nginx 进行测试和分析设置。我有一个典型的 LAMP 应用程序。

我读到过有人使用反向代理并从 nginx 提供静态文件,并将其他所有内容(如 PHP)传递给正在运行的 Apache 实例。他们声称这是一种很好的权衡。我没有关于此的性能数据,但您可能想知道。

相关内容