Apache 是否将所有请求都发送给 PHP 进行处理?

Apache 是否将所有请求都发送给 PHP 进行处理?

Nginx wiki 上的文章似乎表明apache将所有请求发送给PHP进行处理。

[参考 nginx 配置] 在这种情况下,您将所有内容传递给 PHP。为什么?Apache 可能会这样做,您不需要这样做。

我读过其他文章也指出了这一点,我确信可以更改配置,但例如当 Apache 运行 mod-PHP 时,apache 是否只是将所有文件(即 CSS、javascript、图像文件等)发送到 PHP 解释器进行处理?

答案1

事实并非如此。您可以选择 apache 将哪些文件传递给 php 解释器。无论您使用 php 的方式如何(无论是使用 mod_php 还是 fastcgi),情况都是如此。

Check here for example: http://php.net/manual/en/install.unix.apache2.php

<FilesMatch "\.ph(p[2-6]?|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>

这意味着只有与该正则表达式匹配的文件(带有 php/phpN/phtml 扩展名)才会被传递给 php 解析器。

答案2

默认情况下,Apache 不会将所有文件都作为 PHP 脚本处理,因此即使 PNG 或 CSS 或任何非 PHP 文件包含<?php字符串,也不会对其进行解释。不过,这可以更改。

但当httpd产生一个进程来处理请求,mod_phpX将其加载到内存中,并且每个请求都会消耗大量的 CPU 周期和数兆字节的 RAM - 无论请求的文件是否是 PHP 脚本,无论是 1 字节还是 100 兆字节大。

由于 PHP 及其模块中仍然存在非线程安全 (NTS) 代码,因此在使用该模块时,Web 服务器需要采用经典的基于进程的预分叉MPM。这是最慢且最耗内存的 MPM。

以上所有内容清楚地说明了为什么 FastCGI SAPI 能够在繁忙的基于 PHP 的网站上提供更高的性能。

相关内容