nginx/apache/php 与 nginx/php

Posted

技术标签:

【中文标题】nginx/apache/php 与 nginx/php【英文标题】:nginx/apache/php vs nginx/php 【发布时间】:2011-05-05 19:28:35 【问题描述】:

我目前有一台带有 nginx 的服务器,它反向代理到 apache(同一台服务器)来处理 php 请求。我想知道我是否放弃了 apache,所以如果我看到任何形式的性能提升,我会运行 nginx/fastcgi 到 php。我假设我会因为 Apache 相当臃肿,但同时我不确定 fastcgi/php 的可靠性如何,尤其是在高流量情况下。

我的网站每月获得大约 200,000 名唯一身份访问者,每月从搜索引擎抓取大约 6,000,000 次页面。这个数字正在稳步增加,所以我正在考虑性能选项。

我的网站在代码方面非常优化,没有任何缓存(也不想要),每个页面最多有 2 个 sql 查询,其他表没有任何连接,索引也很完美。

大约一年后,我将重写所有内容以使用 ClearSilver 作为模板,然后可能使用 python 或 c++ 来获得极好的性能。

我想我或多或少地从任何熟悉 nginx/fastcgi 并且愿意提供一些基准的人那里寻求任何建议。我的站点是一台带有 1 个四核至强、8gb 内存、150gb velociraptor 驱动器的服务器。

【问题讨论】:

【参考方案1】:

nginx 肯定会比 Apache 运行得更快。我无法谈论 fastcgi,因为我从未将它与 nginx 一起使用,但这个解决方案似乎在多台服务器上更有意义(一个用于静态内容,一个用于 fastcgi/PHP)。

如果您真的以性能为目标——甚至考虑 C/C++——那么您应该尝试 G-WAN,这是一种提供(非常快)C 脚本的一体化服务器。

G-WAN 不仅内存占用小得离谱 (120 KB),而且它的扩展能力也无与伦比。如果您从 PHP 迁移,您还有很多工作要做,但您可以从性能关键任务开始并逐步迁移。

我们已经跳槽了,不能考虑回到 Apache!

【讨论】:

G-WAN 看起来非常非常漂亮!您是否碰巧知道它每秒可以处理多少个连接? 我测得 G-WAN 每秒有 200,000 个请求。鉴于动物是一个 32 位进程这一事实,当它以 64 位代码运行时还有进步的空间(所有其他 Web 服务器在 64 位编译时比在 32 位编译时要快得多)。跨度> 并非总是如此。在非常重的并发负载(动态页面)上,Apache 在大型多核机器上的运行速度比 nginx 快得多。 Nginx 适用于静态文件或我们将其用作代理时。 @iddqd:你能提供一些支持吗? @Wernight:只有自己的测试。一年前我在 64cpu 机器上测试过它。并行度从 100 到 500。与 Apache 相比,Nginx 处理小型静态文件的速度要快得多,并且不使用 RAM。测试 Nginx 时,中大文件速度没有差别,内存占用大。服务动态页面 Django (fastcgi/mod_python) (parallelizm 500 sim. conn.) session,cache,sometimes sql,Nginx 比 Apache 慢两倍。【参考方案2】:

这是一个图表,显示了 nginx、apache 和 g-wan 各自的性能:

g-wan.com/imgs/gwan-lighttpd-nginx-cherokee.png

apache 似乎并不领先(这是一个 -Quad XEON @ 3GHz)。

【讨论】:

请注意,此图表直接来自g-wan,因此更有可能偏向g-wan。【参考方案3】:

这是 g-wan 与 nginx、varnish 等的独立基准测试http://nbonvin.wordpress.com/2011/03/14/apache-vs-nginx-vs-varnish-vs-gwan/

g-wan 每秒处理更多请求,而 CPU 时间更少。

【讨论】:

你怎么知道它是独立的? ;) ...只是好奇。 @STATUS_ACCESS_DENIED,g-wan 和 nginx 作者对该博客文章发表了评论,甚至建议对其服务器的基准进行一些调整;这对我来说表明基准没有缺陷并且做得很公平。复制那篇文章开头详述的基准测试,并让我们知道你得到了什么,独立;),g-wan 现在声称比 nginx 更好的内存管理,它消耗的内存是基准测试中所有其他 Web 服务器最少的。【参考方案4】:

NGINX 是当今网络服务器的最佳选择。

    Apache 和 NGINX 的主要区别在于它们的设计 建筑学。 Apache 使用流程驱动的方法并创建一个 每个请求的新线程。而 NGINX 使用事件驱动 在一个线程中处理多个请求的架构。 就静态内容而言,Nginx 超越了 Apache。 两者都擅长处理动态内容。 Apache 可在所有操作系统上运行,例如 UNIX、Linux 或 BSD 和 完全支持 Microsoft Windows 和 NGINX 还可以在多个平台上运行 现代类 Unix 系统并支持 Windows,但它的 Windows 上的性能不如 UNIX 平台上的稳定。 Apache 允许在每个目录的基础上通过以下方式进行附加配置 .htaccess 文件。 Nginx 不允许额外配置的地方。 请求解释-Apache pass 文件系统位置。 Nginx 传递 URI 以解释请求。 Apache有60个官方动态加载模块,可以 打开/关闭。Nginx 有 3rd Party 核心模块(不是动态的 loadable).NGINX 提供了 Web 服务器的所有核心功能, 在不牺牲轻量级和高性能品质的情况下 这使它成功。 Apache 支持通过动态模块自定义 Web 服务器。 Nginx 不够灵活,无法支持动态模块和加载。 Apache 确保在其服务器上运行的所有网站都是 免受任何伤害和黑客攻击。 Apache 提供了以下配置提示 DDoS 攻击处理,以及 mod_evasive 模块 响应 HTTP DoS、DDoS 或暴力攻击。

何时选择 Apache 而不是 NGINX?

当需要 .htaccess 文件时,您可以覆盖系统范围的设置 以每个目录为基础。 在共享主机环境中,Apache 工作得更好,因为它 .htaccess 配置。 如果出现功能限制 - 使用 Apache

何时选择 NGINX 而不是 Apache

快速静态内容处理 非常适合高流量网站

同时使用两者时

用户可以在Apache前面使用Nginx作为服务器代理。

【讨论】:

以上是关于nginx/apache/php 与 nginx/php的主要内容,如果未能解决你的问题,请参考以下文章

隐藏nginx,Apache,php,tomcat服务版本号

nginx+apache+php+mysql服务器集群搭建

Nginx+Apache+PHP超时时间设定

linux中查看nginxapachephpmysql配置文件路径的方法

linux中查看nginxapachephpmysql配置文件路径的方法

Centos6环境安装