![Apache 是否将所有请求都发送给 PHP 进行处理?](https://linux22.com/image/671988/Apache%20%E6%98%AF%E5%90%A6%E5%B0%86%E6%89%80%E6%9C%89%E8%AF%B7%E6%B1%82%E9%83%BD%E5%8F%91%E9%80%81%E7%BB%99%20PHP%20%E8%BF%9B%E8%A1%8C%E5%A4%84%E7%90%86%EF%BC%9F.png)
这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 的网站上提供更高的性能。