Apache与Nginx

我最近一直在调查Apache和Nginx之间的差异,并对我应该select哪一个感到困惑。

我已经做了一些探索,但两者之间没有明确的比较,我想知道这里的人是否可以就两者之间的分歧发表意见。

我目前的知识让我明白,mod_php比fastcgi更快,更安全,但是在同时连接和内存消耗方面,Apache更糟糕。

我的网站正在使用大量的长时间轮询,但有一个非AJAX的网页基础(即Apache长期轮询顶部)。

我对Apaches内存问题的原始解决scheme是通过node.js发送长轮询,然后让node.js每2秒访问Apache,在这种情况下Apache不会有打开的连接,而是node.js会。 我已经意识到这可能不够好,正在寻找不同的解决scheme。 我仍然对我最初的想法是否有效感兴趣。

那么现代网站哪个更好? Apache还是Nginx?

更新:所有的build议是好的和有效的。 我已经与原来的第二个想法是使用一个完整的Nginx服务器。 我很满意,作为一个专用的服务器,我不能忍受fastcgi的安全问题,并且由于我的长轮询脚本需要用PHP编写,我需要一个能够处理高负载同时连接的服务器,而Apache无论如何也不能这样做我改变了结构,它仍然是饥饿的内存。

我已经标记了Martin F的答案,因为他对我的问题提出了一个清晰而完整的答案,我觉得他应该得到这个评价,但是,这三个答案都是好的和有效的,并且肯定会考虑将反向代理用于我自己的另一个站点因为我刚刚发现Nginx可以在代理中做的非常非常非常酷的事情。

谢谢,

你似乎有一些我觉得需要解决的错误观念。

首先,mod_php只是稍微快一点,我所有的testing都显示这个差别非常小,不值得考虑。我也怀疑安全方面与你有关,因为你似乎正在寻找一个专用的服务器, mod_php在共享环境中确实只有一个优势 – 事实上,在一个专用的环境中,php-fpm将具有PHP的优势,并且您的web服务器现在可以作为不同的进程运行,甚至不会考虑php- fpm如慢日志。

如果这个世界是黑白的,我会说纯粹的nginx设置,并用php-fpm编译php。 更实际的是,如果你已经有Apache的工作,然后让nginx反向代理到Apache,你可能会节省几个小时的安装时间,性能的差异会很小。

但让我们假设这个世界是一秒钟黑白的,因为这使得设置更加出色。 你为你的web服务器做nginx + php-fpm。 要解决上传问题,请使用nginx上传模块和上传进度模块。 这意味着您的Web服务器接受上传并在完成时将文件path传递到PHP,以便该文件不需要通过fastcgi协议在nginx和PHP之间进行stream式传输。 (我有这个在现场设置,它的工作很好,顺便说一句!)

对于用户下载,您使用nginxs类似x-send-file的function,称为x-accel-redirect,本质上你使用PHP进行身份validation,并设置一个nginx接收并开始传输该文件的标题。 PHP结束执行,您的Web服务器正在处理传输,甜! (再次,我有这个在现场设置,它的工作很好)

为了在服务器或其他长时间运行的操作中分发文件,我们意识到PHP并不是最适合这个的,所以我们安装了一个作业服务器,它可以在不同服务器上的工作人员之间分配作业,这些工作人员可以写在任何语言。 因此,您可以创build一个分发工作者,并使用总共200 KB的内存产生其中的5个,而不是使用100 MB的PHP。 甜。 (我也有这种跑步,所以这一切都是可能的)

如果你还没有拿起它,我认为你的许多问题根本与你的Web服务器没有关系,你只是这么想的,因为Apache因为它的结构而迫使它与你的Web服务器相关,通常有比PHP更好的工具工具,PHP是一种知道这一点的语言,并提供了优秀的选项来卸载工作,而不离开PHP。

我强烈build议nginx,但我也认为你应该看看其他问题的其他select,如果你有一个缩放或性能问题,然后随时给我写信。 我不知道你是否可以通过这里发送消息,但否则在[email protected]给我写信,因为我没有为没有标记nginx的东西寻找服务器故障。 🙂

我会build议运行nginx作为反向代理。 它将处理所有的静态和caching文件(比Apache快得多/内存消耗更less),然后将所有对dynamic内容的请求转发给Apache。

我不太确定mod_php是否比其他select更快,你是从哪里读的? 我已经用nginx + php-fpm做了一些实验室testing,并且从我测量的结果来看,它击败了其他所有的设置。

看看这个设置: http : //interfacelab.com/nginx-php-fpm-apc-awesome/

除了我使用http://www.dotdeb.org/提供的 PHP软件包(包括一个php-fpm软件包和一个可以使用的init脚本)外,我的设置基本相同。 我不使用memecache或syck。