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


36

可能在这里有人问过这种问题,但我找不到与我的问题真正匹配的问题。听说nginx的性能非常出色,但是Apache有更多文档,社区(阅读:专家)来获取帮助

现在我想知道的是,两台Web服务器在性能,配置的简易性,自定义级别等方面如何进行比较。在vps环境中作为REVERSE PROXY服务器?

我仍在权衡薄(红宝石Web服务器之一)的红宝石Web应用程序(不是ROR)的两者之间。
具体答案将不胜感激。一般的回答是不碰红宝石部分就可以了。我仍然对Web服务器管理不满意。


tnx到马丁和webdestroya的答案,现在我倾向于nginx
MH 2010年

使用像清漆这样专门设计的反向代理会更有意义吗?
ptman

Answers:


31

因为我同意webdestroyas回答的最重要点,所以我想在此发表评论,但是时间太长了。

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

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


易于配置: Nginx并不比Apache难。这不一样。如果您习惯使用Apache,那么更改总是会更加困难,这并不意味着配置样式本身会更加困难。一年多以前,我从Apache完全迁移到Nginx,今天我将很难配置Apache服务器,而我发现Nginx极其易于配置。

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

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

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


+1为澄清。
约翰·加迪尼尔

我会推荐它作为您唯一的Web服务器。请参阅我的评论 serverfault.com/questions/133481/…<-在这里。我将它用作VPS上唯一的Web服务器,并且其他用户也可以使用FastCGI来安装其PHP / CGI应用程序。
杰森

贾森(Jason)我已经将其用作唯一的Web服务器已有一年多了,它每天可以处理数百万个页面加载。我完全同意您的建议!:)
Martin Fjordvald 2010年

8

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

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

自定义级别:
Apache。Apache有大量的mods和其他插件为其编写。尽管Nginx仍然为此提供了插件,但我认为Apache的功能远不止Nginx。

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

反向代理获胜者:
NGinX


2
我很感兴趣,没有争论。为什么Nginx是反向代理的赢家?您剩下的答案并不能使一个人与众不同。如果有的话,它倾向于支持Apache。
约翰·加迪尼尔

1
好吧,因为在大多数情况下,由于负载高,您需要反向代理。这可能意味着性能可能是最大的问题,在这种情况下,Nginx是赢家,这就是我选择它的原因。作为开发人员,我喜欢apache,但是从“如何从此Web服务器获得最大性能”的角度出发,我会选择Nginx
Mitch Dempsey,2010年

8

Nginx是基于事件的,而apache是​​基于进程的。在高负载下,这将改变世界。Apache必须为每个连接派生或启动一个新线程,而nginx则不需要。这种差异主要表现在内存使用率上,但也表现在用户响应时间和其他性能指标上。Nginx可以在现代硬件上处理成千上万的同时 HTTP Keepalive连接。Apache将为每个连接使用1-2 MB的堆栈,因此进行数学计算后,您只能同时处理数百个甚至一千个连接,而无需开始交换。

在我们的环境中,我们在Apache和IIS的前面使用nginx作为负载平衡和缓存代理,并且不会更快乐。我们使用两个小巧的Nginx盒子代替一对非常昂贵的租赁F5设备,并且我们的站点在感觉和测量响应时间上都快得多。


1

大约两个星期前,我和你处于同样的困境。

给您一个非常简洁的答案:根据我的研究,nginx确实非常快速且对资源友好,但是它只被认为可以反向代理静态文件。其余的都是您必须配置或编写脚本的解决方案。

AFAIK nginx没有htaccess文件,因此,如果依赖于该功能,则必须找到解决方法。

AFAIK所需的所有东西都可以用,并且我看过教程。

我将在测试和性能分析设置中使用nginx。我有一个典型的LAMP应用程序。

我已经读到有人反向代理并从nginx提供静态文件,并将PHP之类的其他所有东西传递给正在运行的Apache实例。他们要求一个很好的权衡。我没有与此相关的性能数据,但您可能想知道。


2
出于性能原因,禁用apache上的htaccess替代是很常见的,在为高性能而设计的服务器中支持这种功能没有多大意义。
theotherreceived

感谢您添加该声明。OP不是专业管理员,因此我们需要明确。
deploymonkey 2010年

1

在过去的几年中,我在各种不同环境的各种平台上使用Apache的mod_proxy遇到了严重的问题。它会不时地停止工作,唯一的解决方法似乎是重新启动Apache服务器。

就个人而言,我不是在问“ nginx vs Apache”,而是“ nginx vs lighttpd”,这是一个更艰难的要求!


有效的参数,但是上次我检查时,lighttpd仍然有很长的未解决的bug,并且因内存泄漏而闻名。管理员建议不要进行生产部署。这改变了吗?
deploymonkey 2010年

它肯定有一些警告(特别是在提供大文件的地方),但是它比Apache作为代理要稳定得多-在过去的六个月中,我在几次部署中都没有遇到任何实际问题
莫。2010年

由于某些被遗忘的原因,我已从候选列表中注销了lighttpd :)
mhd 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.