如何在虚拟主机上启用 suexec?

Posted

技术标签:

【中文标题】如何在虚拟主机上启用 suexec?【英文标题】:How to enable suexec on a virtual host? 【发布时间】:2016-02-11 20:56:20 【问题描述】:

我正在使用 Apache2.2 和 FastCgi 来运行 php 代码(使用 php-fpm)。

我的 FCGI 配置如下并且工作正常:

User apache
Group apache

LoadModule fastcgi_module modules/mod_fastcgi.so

FastCgiIpcDir /var/run/mod_fastcgi
FastCgiConfig -idle-timeout 20 -maxClassProcesses 1

AddHandler php-script .php
Action php-script /php5-fcgi
AddType application/x-httpd-php .php

<Location "/php5-fcgi">
    Order Deny,Allow
    Deny from all
    Allow from env=REDIRECT_STATUS
</Location>

我的虚拟主机配置如下,也可以正常工作:

<VirtualHost XX.XX.XXX.XXX:80>
    DocumentRoot "/srv/apache/test"
    ServerName my.domain.com
    ErrorLog  /srv/apache/test/logs/test.log
    DirectoryIndex index.php
    LogLevel debug

    <Directory "/srv/apache/test/www">
        Options +Indexes
        Order allow,deny
        Allow from all
    </Directory>


    Alias /php5-fcgi /var/www/cgi-bin/test/php.fcgi
    FastCgiExternalServer /var/www/cgi-bin/test/php.fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization -idle-timeout 3600

    <Directory "/var/www/cgi-bin/test">
        Options +ExecCGI
        SetHandler fastcgi-script
        Order Deny,Allow
        Allow from env=REDIRECT_STATUS
    </Directory>

</VirtualHost>

我的测试页面上的 phpinfo() 显示出来了。现在我想让它与 Apache 的 Suexec mod 一起工作。所以我在 apache config 中添加了以下几行:

# Into my virtualhost config
SuexecUserGroup www-test www-test

# Into my fastcgi config
FastCgiWrapper On

然后我将我的 fcgi 脚本 (/var/www/cgi-bin/test/php.fcgi) 和我的文档根目录 (/srv/apache/test) 传给 www-test 用户。

我重新启动了 httpd 和 php-fpm 服务,我刷新了我的测试页面,我收到了错误 500 并显示以下日志:

==> /var/log/httpd/error_log <==
suexec failure: could not open log file
fopen: Permission denied
[Tue Nov 10 21:35:48 2015] [warn] FastCGI: (dynamic) server "/var/www/cgi-bin/test/php.fcgi" (pid 29704) terminated by calling exit with status '1'
[Tue Nov 10 21:35:53 2015] [warn] FastCGI: (dynamic) server "/var/www/cgi-bin/test/php.fcgi" (uid 505, gid 506) restarted (pid 29711)

==> /srv/apache/test/logs/test.log <==
[Tue Nov 10 21:36:05 2015] [error] [client 90.XXX.30.XX] FastCGI: comm with (dynamic) server "/var/www/cgi-bin/test/php.fcgi" aborted: (first read) idle timeout (20 sec)
[Tue Nov 10 21:36:05 2015] [error] [client 90.XXX.30.XX] FastCGI: incomplete headers (0 bytes) received from server "/var/www/cgi-bin/test/php.fcgi"

你知道我可能错过的配置吗?


编辑:我已将我的 Vhost 指令之一编辑如下:

 FastCgiExternalServer /var/www/cgi-bin/test/php.fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization -user www-test -group www-test

现在我的测试页面正在运行,但我使用 php 执行了 whoiam 命令,我得到的是 apache 用户而不是我的 Suexec 用户 (www-test)。

你知道我的 Suexec 配置不起作用的原因吗?

【问题讨论】:

【参考方案1】:

PHP FPM 需要配置为使用特定的user。

确保池配置中user 的值与您希望PHP 执行的Unix 用户相匹配。通常它默认为www-data,但这可能已经更改为www-user,这取决于你编译PHP的方式。

【讨论】:

以上是关于如何在虚拟主机上启用 suexec?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Macbook Pro 上启用对 CPU 虚拟化的支持?

Apache FastCgi、PHP-FPM、Suexec 权限被拒绝错误

Apache FastCgi、PHP-FPM、Suexec 权限被拒绝错误

如何在 WAMP Server 3 的虚拟主机中启用目录列表

电脑启用虚拟化,必须掌握这个技巧!

如何使用 JavaFXPorts 在 android 中启用 JavaFX 虚拟键盘