我有一个 vps,运行 directadmin,安装了 apache 2 和 php 5。一切都运行正常,直到今天,我发现 PHP 脚本是在 apache:apache 下执行的,而不是在文件所有者 uid 下执行的。这搞砸了整个系统,但主要的问题是我无法弄清楚为什么 suphp 会突然停止工作??
一些信息:
root # php -v
PHP 5.2.17 (cli) (built: Aug 17 2011 21:02:28)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies
httpd配置文件
User apache
Group apache
...
<Directory "/var/www/html">
Options -Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
<IfModule mod_suphp.c>
suPHP_Engine On
suPHP_UserGroup webapps webapps
SetEnv PHP_INI_SCAN_DIR
</IfModule>
</Directory>
<VirtualHost 192.168.56.55:80 >
...
SuexecUserGroup robert robert
...
<Directory /home/robert/domains/testing.com/public_html>
Options +Includes -Indexes
php_admin_flag engine ON
</Directory>
</VirtualHost>
额外的/httpd-php-handlers.conf
<FilesMatch "\.(inc|php|php3|php4|php5|php6|phtml|phps)$">
AddHandler application/x-httpd-php .inc .php .php3 .php4 .php5 .phtml
AddHandler application/x-httpd-php-source .phps
</FilesMatch>
每当我在 /var/www/html 或 home/robert/domains/testing.com/public_html(文件所有者为 robert:robert)中运行 phpinfo() 时,结果都是相同的:User/Group apache(48)/48
我该如何解决这个问题?
- 并且 suphp 日志是空的 :(
答案1
suPHP 可能未安装。
由于您使用条件加载语句,suPHP 可能在 Apache 升级时被删除。
我不再使用 DirectAdmin 框,但我知道它们曾经在覆盖自定义配置时存在问题。
确认 suPHP 确实安装在 Apache 中。使用:
httpd-l
列出内置的 Apache 模块。或者在您的配置中查找 Load 语句。一种快速测试方法是注释条件 Load 语句,然后尝试重新启动 Apache。
确保在域上启用了 suPHP,并且 httpd 配置中的用户/组规范正确。(您发布的内容看起来不错。)
一旦启用 suPHP,您可能只需将目录 chown 给正确的用户即可。
答案2
老实说,(从管理员的角度来看)suphp 是一个坏主意,而且很危险。在共享系统上尤其如此。话虽如此……你确定 suphp 正在加载吗?你有一个格式良好的语句,如果模块加载失败或丢失,它将被完全忽略。