Apache 与 Nginx

Apache 与 Nginx

我最近一直在研究 Apache 和 Nginx 之间的区别,不知道该选择哪一个。

我做了一些搜索,但两者之间没有明确的比较,我想知道这里是否有人可以就两者之间的差异发表看法。

我目前的知识使我知道 mod_php 比 fastcgi 更快、更安全,但是 Apache 在同时连接和内存消耗方面表现要差得多。

我的网站使用了大量长轮询,但是有一个非 AJAX Web 基础(即顶部带有长轮询的 Apache)。

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

那么对于现代网络来说,哪个更好呢?Apache 还是 Nginx?

更新:所有给出的建议都是好的和有效的。我采用了最初的第二个想法,即使用完整的 Nginx 服务器。我很满意,作为专用服务器,我不会遭受来自 fastcgi 的安全问题,而且由于我的长轮询脚本需要用 PHP 编写,我需要一个可以处理高负载同时连接的服务器,而 Apache 无法做到这一点,无论我如何更改结构,它仍然会占用大量内存。

我标记了 Martin F 的回答,因为他对我的问题给出了如此清晰和完整的答案,所以我觉得他值得这个分数,但是,所有三个答案都是很好且有效的,并且我肯定会考虑在我的另一个网站上使用反向代理,因为我刚刚发现 Nginx 在代理方面可以做一些非常非常酷的事情。

谢谢,

答案1

您似乎有一些误解,我认为需要予以解决。

首先,mod_php 只是稍微快一点,我所有的测试都表明差异非常小,不值得考虑。我还怀疑安全性方面与您是否相关,因为您似乎正在寻找专用服务器,而 mod_php 实际上只在共享环境中具有优势 - 事实上,在专用环境中,php-fpm 将具有优势,因为 PHP 和您的 Web 服务器现在作为不同的进程运行,这甚至没有考虑到 php-fpm 中的出色日志记录选项,例如慢速日志。

如果世界非黑即白,我会说使用纯 nginx 设置并使用 php-fpm 编译 php。更现实的是,如果您已经让 Apache 运行,那么让 nginx 成为 apache 的反向代理,您可能会节省几个小时的设置时间,而且性能差异会很小。

但是让我们假设世界是黑白的,因为这会带来更棒的设置。您为 Web 服务器使用 nginx + php-fpm。要解决上传问题,您可以使用 nginx 的上传模块和上传进度模块。这意味着您的 Web 服务器接受上传并在完成后将文件路径传递给 PHP,这样文件就不需要通过 fastcgi 协议在 nginx 和 PHP 之间传输,太棒了。(顺便说一句,我在实时设置中使用它,效果很好!)

对于用户下载,您可以使用 nginxs 的类似 x-send-file 的功能(称为 x-accel-redirect),本质上您在 PHP 中进行身份验证并设置一个标头,nginx 会拾取该标头并开始传输该文件。PHP 结束执行,您的 Web 服务器正在处理传输,太棒了!(再次说明,我在实时设置中使用它,效果很好)

对于跨服务器分发文件或其他长时间运行的操作,我们意识到 PHP 并不是最适合的,所以我们安装了 gearman,它是一个作业服务器,可以在不同服务器上的 worker 之间分配作业,这些 worker 可以编写为任何语言。因此,您可以创建一个分布式工作器并生成 5 个,总共使用 200 KB 内存,而不是 PHP 使用的 100 MB。太棒了。(我也在实时运行这个,所以这实际上都是可能的)

如果你还没有意识到这一点,我认为你的许多问题根本与你的 Web 服务器无关,你这样想只是因为 Apache 由于其结构而强制它与你的 Web 服务器相关,而通常有比 PHP 更好的工具来完成这项工作,并且 PHP 是一种了解这一点的语言,它提供了无需离开 PHP 即可减轻工作负担的绝佳选择。

我强烈推荐 nginx,但我认为你应该考虑其他选项来解决你的其他问题,如果你有扩展或性能问题,请随时给我写信。我不知道你是否可以通过这里发送消息,否则请给我写信[电子邮件保护]因为我不会跟踪任何没有用 nginx 标记的服务器故障。:)

答案2

我建议将 nginx 作为反向代理运行。它将处理所有静态和缓存文件(速度比 Apache 快得多/内存开销更少),然后将所有动态内容请求转发给 Apache。

答案3

我不太确定 mod_php 是否比其他方案更快,您从哪里读到的?我已经对 nginx+php-fpm 进行了一些实验室测试,从我的测量结果来看,它胜过所有其他设置。

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

我的设置几乎相同,只是我使用了来自http://www.dotdeb.org/- 其中包括一个 php-fpm 包和一个可立即使用的 init 脚本。我不使用 memecache 或 syck。

相关内容