我的问题是,当大多数内容都是通过 php 动态生成时,使用 nginx 作为反向代理有什么优势吗?
就我而言,nginx 在将静态内容缓存到缓存中并同时处理多个请求方面非常有用。
这是真的吗?或者在大多数由 php 驱动的动态内容网站中,将 nginx 作为反向代理运行还有其他优势吗?
答案1
如果您问优点,您必须将它与一些替代方案进行比较:)如果您使用 PHP,您总是需要一些网络服务器,因为 PHP 本身没有。
总体来说,Nginx 有如下很酷的功能:
- 你提到,在 Nginx 中实现缓存的方法有很多种
- 由于拥有大量模块,它提供了很大的灵活性,尤其是 mod rewrite 或 mod lua
- 与 Apache 或 Zeus 网络服务器等替代方案相比,开销(内存/CPU)非常低
- 乐于助人的社区来回答问题
- 正在积极开发中,因此新功能不断涌现。fe spdy
答案2
nginx+php 唯一值得关注的替代方案是mod_php
在 apache 中使用。以下是主要区别
- 几乎所有 php 应用程序都假设它们在 apache 中运行,配置语法将始终以 apache 语法提供。
- 在 apache 中,静态页面和脚本页面可以随意混合;在 nginx 中,您必须从请求本身中区分出静态文件和动态内容。因此,配置会稍微复杂一些。由于您不会提供静态内容,因此这可能不会成为问题。
- nginx 没有与 apache 等效的进程内进程
mod_php
,它必须将请求代理到脚本解释器;要么 要么php-cli -b
。nginxuwsgi --plugin php
无法启动任何一个进程;您需要自行解决这个问题。 - nginx 是异步的,可以轻松处理高流量和慢速连接,无需额外努力;只要 php 应用程序速度快,您几乎可以免费处理多一点的流量。在我的组织中,当我们放弃 apache 时,我们的响应能力得到了很大的提升,尽管 php-cli 进程更少线程。
- 如果 php 工作进程崩溃(例如,当你尝试将数据附加到几 GB 的日志文件时),它可能无法通过 FastCGI 提供原因解释;普通的 CGI 没有这个问题,但需要在 nginx 端进行非常不同的配置(二级 http 服务器,能启动 cgi 进程,例如 lighttpd)。
答案3
我认为这篇文章可以很好的解释优点: http://www.aosabook.org/en/nginx.html 特别是对于客户端速度较慢的情况。