据我所知,mod_php可以通过以下方式配置php.ini或者.htaccess对于 CGI,.htaccess文件无法使用。
事实上mod_php可以使用.htaccess文件是否会使其相对于 CGI 更加不安全?
答案1
您的基本假设是错误的,因为 CGI 中的 PHP 可以扫描每个目录的.ini
文件。
这两个功能都可以关闭,只需不设置
AllowOverride Options
在你的 Apache 配置中或设置
user_ini.filename = # empty value!
在您的全局 PHP 配置中。
因此,总而言之,两者同样安全或不安全。话虽如此,我不会说即使只有.htaccess
可能,它也会更不安全,因为出于安全目的,您可以在.htaccess
每个目录.ini
文件中设置一组受限制的选项。
答案2
首先我们来理清一些概念。
.htaccess不是一个只供您配置 mod_php 或 Rewrites 内容的神奇文件。
.htaccess 文件是供非管理员用户在特定目录中为 httpd 进行配置的一种方式,如果您是 httpd 服务器的管理员,则无需使用它们,甚至根本不使用它们是明智的,因为它们的性质是每个目录配置,它们往往会增加更多复杂性、麻烦和大量的“头发拉扯”(只需搜索 serverfault 或 stackoverflow)。
HTTPD 指令通常有多个有效上下文,因此对于 Apache HTTPD 的配置,您可能可以在虚拟主机上下文或目录中定义所有 mod_php 指令,而不仅仅是“.htaccess”。如果您想知道哪些指令可以与 mod_php 一起使用,您可以查看其文档或使用 mod_info httpd 模块获取它支持的所有指令,它将告诉您已加载的所有模块及其提供的指令列表。
你可能会想,那它为何会如此广泛呢?因为大多数 php 应用程序和类似应用程序都会在其中提供一个或多个 .htaccess 文件,所以您不必思考并立即使其工作,尽管在许多情况下,从长远来看这只会给您带来问题。
你应该怎么做呢?如果您是 httpd 服务器的管理员,请尝试在虚拟主机中始终通过目录配置非全局指令,除非您真的别无选择,并且永远不要使用 .htaccess。
您是否知道,对于 httpd 服务器收到的每次访问,您的 .htaccess 文件至少要读取三次?而且读取次数越多,服务器的开销就越大?再加上被迫使用 mod_php 和非线程 MPM(prefork),您的 httpd 服务器可能会以相当不理想的方式运行。
mod_php是 Apache HTTPD 服务器中用于解析 php 文件的第三方模块。许多人使用它是因为现在大多数发行版都默认提供它,所以大多数懒人会直接安装 apache httpd 而不加思索,因为它是一种安装和播放的方式,但它也带来了一些缺点,例如必须强制 httpd 使用非扩展 MPM,例如 prefork,因为 mod_php 不是线程安全的,因此许多人最终会抱怨负载增加时出现延迟峰值,或者无法区分他们的脚本何时减慢了 httpd 服务器的速度,因为他们所能看到的只是“httpd 生成大量进程,并且响应时间太长”。
配置 PHP 设置。正如我上面提到的,与所有 httpd 模块一样,无论是否是第三方,mod_php 都提供了一组提供功能的“指令”,因此大多数 mod_php 指令都提供了特定于 php 解析的功能,大多数情况下与 mod_php 指令提供的功能相同,而其他一些功能只需在 php.ini 设置中设置即可,有关详细信息,请查看 PHP 文档。
该怎么办?分离 httpd 和 php 解析。在 php-fpm 服务器中解析您的 php 文件,并使用 mod_proxy 和 mod_proxy_fcgi 让您的 httpd 服务器将这些请求反向代理到 php-fpm。更多信息请见此处:https://wiki.apache.org/httpd/PHP-FPM