您认为哪种 Web 服务器架构更好?

您认为哪种 Web 服务器架构更好?
  1. 使用 apache 来处理需要处理的动态请求php,并使用 nginx 来提供静态文件
  2. 使用 nginx 来处理所有请求

因此关键点是:它们中哪一个在服务动态请求方面效率更高(我们毫不怀疑 nginx 在服务静态文件方面比 apache 好得多)?

答案1

Nginx 不提供动态内容,它只能与某种后端通信,后端可以是 Apache 或 FastCGI 进程(可以在另一台主机上运行)。如果将 Apache 与 FastCGI 进行比较,那么后者更容易配置,但前者可能更通用。不过,我的印象是,在大多数情况下,Nginx/FastCGI 就足够好了。YMMV。

答案2

您是否想到了什么特殊配置?

PHP 是动态内容,因此您不会使用 Nginx 的反向代理缓存功能。如果您有效地使用 Nginx 作为动态内容的负载平衡器,它肯定会更有效率。

如果您谈论的是单个服务器,将 Nginx 放在前面以透明地代理动态内容将增加额外的处理层。虽然可能很短,但从技术上讲,这会带来额外的开销。不过,缓存带来的性能提升可能会弥补这一点。

唯一能让你对自己的独特情况充满信心的方法是运行自己的基准测试。可以使用以下实用程序测试仪可用于负载测试。

答案3

人们大多在较大的网站上使用 1,但是2应该很好。有基准,但大多数是合成的或特定的。

总体而言,它们非常接近,但我认为 nginx 更容易设置(或者更确切地说,更难错误配置)并且内存占用更少。

为什么不在生产中使用这两个选项来测试您的特定设置呢?

答案4

在 apache 中将静态和动态分成两个不同的虚拟主机(因此使用不同的主机名)。

将动态主机名指向您的服务器/负载均衡器(“原点”)。

将静态主机名 CNAME 到几乎任何 CDN(几乎不管是哪个),并让该 CDN 充当返回到您的原点的缓存代理。

正确配置 apache,注意 mod_expires 配置(如果是集群,则注意 etag 设置)。

您的源站实际看到的静态内容的请求数量将非常小,以至于使用第二个 http 服务器来使配置变得复杂是没有意义的。

从技术上讲,如果你很优秀,并且你很了解你的框架的 http-headers 操作能力,那么你也可以通过 CDN 运行动态内容(并且应该如此),但一次只能运行一件事。

相关内容