使用 Nginx 运行 PHP 应用程序?

使用 Nginx 运行 PHP 应用程序?

我已经研究(和测试)了好几天,关于使用 Nginx 而不是 Apache 的优缺点。

我的主要问题是,对于基于 PHP 和 MySQL 构建的 SaaS,使用 Nginx 是否值得?

几乎所有的静态文件都将由 Amazon S3 提供。这样就只剩下 php 和数据库需要由服务器处理了。

该服务器将是四核服务器,配备 8GB RAM 和 10K 磁盘(RAID 10)。

我知道在发布时不会有太大差异,因为总体流量负载会相当低。但是,我宁愿现在就为未来做计划,而不是重新配置我们的应用以在完全不同的网络服务器上运行。

我已经在 apache 和 nginx 上测试了该应用程序。Apache 很容易设置,因为它基本上是一个基本的 LAMP 堆栈,带有一些额外的包。使用 nginx 则需要做更多的工作 - 而且我还没有完全设置好它(至少不是我想要推向生产的东西)。我一直在使用 Nginx .0.8.50、php5.3.3 和 php-fpm 和 APC。Nginx 需要编译几个库,配置文件不是我习惯的东西 - 而且仍然需要大量工作。

因为我们的大多数应用程序都是动态的,所以真的值得我们花时间担心 Nginx 吗?

提前致谢!

答案1

除非您有理由,否则我不会担心 nginx 或任何其他新奇的工具。请适当规划您的应用程序(尽量不要弄得一团糟)。将静态内容与动态内容分开,以及设置适当的 apache 缓存标头等事情将比部署 nginx 和 varnish 等工具更有帮助。

保持良好的流量统计数据 - 并保持您的代码和内容井然有序 - 当您足够忙以至于实际上需要转向其中一种技术来节省真金白银时......您就可以这样做。

越简单越好。除非 apache 给你带来太多开销,否则你不需要 nginx。除非你的应用程序被可以静态提供到其他地方的内容所影响(你也可以通过其他方式做到这一点),否则你可能不需要 Varnish。话虽如此 - 我很想将 Varnish 之类的东西设计为应用程序架构的一部分,而不是担心 Apache……但很难说。

附录:我管理一些中等规模的 PHP 网站,这些网站对于任务至关重要。一旦出现问题,钱就打水漂了。关注客户端和共享缓存、不错的网页设计以及通过 mysql 进行少量共享会话,可以让你走得很远 - 除非你的应用程序逻辑非常慢,并且你真的需要将静态内容从应用程序中分离出来,否则你不需要所有新玩具,尽管它们很棒也很诱人。你的瓶颈很可能首先是你的数据库 - memcache 甚至可能太多了 - cache_lite 也有很大的作用(关注缓存 - vs - 不关注比你选择哪种缓存技术更重要,直到你变得非常大)

答案2

这有点像我的答案,但无论如何:

为什么要这么麻烦?使用像 nginx 这样的轻量级 Web 服务器的通常理由是提供大量轻量级线程来提供静态内容,从而允许你每 MB 内存处理更多并发静态内容请求。

由于您正在卸载静态内容,所以这不是一个问题。

如果(几乎)每个到达您服务器的请求都要解释 PHP,那么您最好坚持使用经过良好调整的 apache+mod_php+APC。

答案3

好吧,鉴于您显然已经投入了好几个小时,算一下您的雇主每小时付给您多少钱,并问问自己是否节省了那么多价值的硬件(或者是否会节省)。

陷入 $incumbent 与 $pop-alternative 的分析瘫痪是系统管理员迄今为止效率最低的事情之一。解决您实际遇到的问题(例如网站尚未启动),如果您遇到流量太大以至于 CDN、http 缓存、负载平衡器和价值数百美元的 RAM 都不够用的地步然后担心最后 10% 的优化。

答案4

除非我确定我需要它,否则我可能不会为这样的事情烦恼。我发现 Apache 工作得很好,除了少数非常特殊和特殊的情况外,它对我来说都是最好的选择。如果 Apache 易于设置,并且您的配置工作正常且正确,请在执行优化之前确定是否需要进一步优化。

进行一些基准测试和负载测试。您当前的设置能否管理预期的负载?如果可以,那么恭喜您,您已经完成了这一步。如果不能,那么这台机器上的 CPU 实际上是您的限制因素吗(而不是 RAM、磁盘、网络带宽或其他因素)。除了负载测试,还要进行一些分析。如果您运行一些基准测试,发现 PHP 使用了 98% 的 CPU,而 Apache 使用了 1% 的 CPU,那么优化 Web 服务器的 CPU 使用率永远无法为您带来超过 1% 的改进。

相关内容