Nginx + php-fpm VS Nginx 作为 Apache 的反向代理

Nginx + php-fpm VS Nginx 作为 Apache 的反向代理

有人能告诉我使用 NginX 作为 Apache 反向代理有什么好处吗?人们建议这样静态内容由 nginx 处理,动态内容(php 文件)则交给 Apache。

  1. 直接让 php-fcgi/php-fpm 处理这些 PHP 文件不是比让 Apache 的 mod_php 处理更合理吗?

  2. 有哪些优势(性能方面)

  3. 如果我选择反向代理,是否需要执行 nginx 重写,或者 apache 中的 .htaccess 是否可以按原样工作?(因为它是反向代理,所以调用被定向到 apache,对吗?)

提前预约

答案1

反向代理速度较慢,通常更糟糕,但是,使用它的一些原因是保持与 .htaccess 文件的(某些)兼容性(如果您使用纯 nginx 设置,则必须编写(这并不总是可行的))或者如果您需要特定的 apache 模块。(有些人可能会争辩说,如果您有这些要求,那么使用 apache 会更容易。)

  1. 带有 nginx 的 PHP-FPM 是首选解决方案 - 您可以获得 nginx 的快速静态文件服务和良好的 PHP 性能,而无需增加额外的开销、代理或(通常)apache 的大量内存使用量。
  2. nginx+PHP-FPM(通常)速度更快,占用的内存更少。Nginx + Apache + FastCGI/FPM 仍将快速提供静态文件,但动态文件会产生额外开销(不像 mod_php 那么糟糕,但比消除 apache 更糟糕)。
  3. 您将需要两者兼顾 - nginx 需要知道如何处理路径(例如,提供静态文件、拒绝访问 .htaccess 等),而 apache 需要知道如何处理文件。在某些情况下,如果您的 .htaccess 文件不属于静态文件(因此每个需要重写的请求都将发送到 apache),那么简单地拒绝访问某些位置,并让 apache 通过 .htaccess 完成其余工作可能是可以接受的 - 这似乎并不理想,会降低性能,并且其可靠性值得怀疑 - 但它可以在简单的设置下工作)。

如果可以,直接使用 nginx+PHP-FPM 设置。如果不能,虽然反向代理可能有一些优点,但请仔细考虑其后果,特别是如果您依赖 .htaccess 文件。

答案2

我想说的是,情况恰恰相反:将 Apache 从组合中剔除将提高性能。如果您喜欢 Apache 提供的一些其他模块,或者如果您有某些外部原因要继续使用 Apache 来处理动态内容,那么您应该保留 Apache。

只要您不对静态内容的访问进行任何操作,让 Apache 处理重写应该没问题。但请确保.ht*在您的 nginx conf 中有一个排除项:不要意外地将这些特定的静态文件提供给公众。

答案3

我最近从 转移ApacheNginx。虽然我并不声称自己是专家,但我建议放弃 Apache 并使用nginxPHP-FPM而不是反向代理。使用不带 Apache 的 Nginx 将为非静态内容带来轻微的性能提升,为静态内容带来巨大的性能提升。由于 Nginx 不使用.htaccess文件,这意味着您必须配置 Nginx 来处理所有重定向等。这乍一看可能有点令人生畏,但在我学会了如何配置 Nginx 后,我发现它比使用 .htaccess 文件简单得多。有些工具可以自动将 .htaccess 规则转换为 Nginx 规则,但我建议您自己学习。我发现这些工具转换不够准确,而且使用了太多if语句。请参阅:如果是邪恶的

相关内容