我一直认为 PHP 最好以 Apache 模块的形式安装,但最近,有人在本地论坛上指出,以 CGI 形式运行 PHP 在安全性方面更佳。我谷歌了一下,发现Dreamhost 默认其 PHP 安装通过 CGI 运行。现在我有点困惑了。
据我所知(我不是系统管理员,只是一名 Web 开发人员),当 PHP 作为 Apache 模块安装时,存在用户权限问题。当通过 CGI(或曾经通过 CGI)使用 PHP 时,存在速度问题。
目前推荐的安装 PHP 的方法是什么?在共享和专用主机上都适用。
答案1
作为模块运行 PHP 通常效率更高,但意味着所有脚本都在同一个用户帐户下运行(无论 Apache 以哪个帐户运行),这可能会在共享环境中带来安全问题。
CGI 速度较慢,因为它会为每个需要的请求启动一个新的 PHP 进程,但可以配置为以拥有它的用户的身份运行每个脚本,这在共享环境中可以更加安全。
FastCGI 设置起来可能比较麻烦,但运行速度接近 PHP 模块。
答案2
一般来说,您想要运行 CGI 的唯一原因是在共享环境中。
这允许您拥有 suEXEC 样式(参见:苏普) 安排,其中脚本仅作为所有者的 UID/GID 执行,并且对文件系统上的任何其他内容具有有限的权限。
否则,mod_php 效率更高,而且通常更容易调试。
答案3
使用 FastCGI,我可以重新启动 PHP 而无需重新启动服务器(只需终止 PHP 进程,服务器会注意到它并立即重新启动它们)。