Andy's Blog » » 让PHP运行在 suexec+fastcgi 模式下

让PHP运行在 suexec+fastcgi 模式下

让php 运行在 suexec+fastcgi 模式下

在网上翻遍了,也没有找到一篇完整的有关 apache2 +suexec + fastcgi 运行 php 的文章,不知道是什么原因。呵呵,看来只有靠自己来测试了。经过三天的时间,终于有了结果。以下是在 centos 4.3 下的安装要点:

首先编译 php-fastcgi

编译要求, php 需要增加支持 fastcgi, 安装以后的 php -v 命令应该有如下显示:

[[email protected] ~]# php -v
PHP 4.3.9 (cgi-fcgi) (built: Sep 15 2006 15:43:47)
Copyright (c) 1997-2004 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies

如果有 cgi-fcgi ,则说明支持 fastcgi 方式。

接下来是 编译和安装 mod_fastcgi

安装之前,先确认是否安装 httpd-devel rpm 包,否则使用yum 安装之;然后从 http://www.fastcgi.com 下载 mod_fastcgi-2.4.2.tar.gz ,解包以后,按照 INSTALL.AP2 文档的步骤执行以下操作:

$ cp Makefile.AP2 Makefile
$ make top_dir=/usr/lib/httpd/
$ make install

编译安装成功后,应该在 /usr/lib/httpd/modules 目录有 mod_fastcgi.so 文件,此时说明 mod_fastcgi 已经安装成功。

配置
httpd.conf 中增加以下配置:

LoadModule fastcgi_module modules/mod_fastcgi.so
FastCgiIpcDir "/tmp/fcgi_ipc/"
FastCgiSuexec /usr/sbin/suexec
FastCgiServer /var/www/igenus/php-cgi/php -processes 10
FastCgiConfig -singleThreshold 100 -killInterval 300 -autoUpdate \
    -idle-timeout 240 -pass-header HTTP_AUTHORIZATION
<virtualhost *:80>
        SuexecUserGroup vpopmail vchkpw
        DocumentRoot /var/www/igenus/webroot
        ServerName mail.test.com
        ScriptAlias /php-cgi/ /var/www/igenus/php-cgi/
        <location "/php-cgi/php">
                SetHandler fastcgi-script
        </location>
        AddHandler php-fastcgi .php
        Action php-fastcgi /php-cgi/php
</virtualhost>

其中,FastCgiIpcDir 很多网文并没有提到这一点,很重要。注意 /tmp/fcgi_ipc 目录必须供 httpd User/Group 可读写。

然后在 /var/www/igenus/php-cgi/ 目录建立以下 php wrapper 脚本

#!/bin/sh
PHPRC="/etc"
export PHPRC
PHP_FCGI_CHILDREN=8
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_MAX_REQUESTS
exec /usr/bin/php

注意 php-fcgi/php 目录及文件属主一定要是与 SuexecUserGroup user group 相同。
PHPRC environment 环境变量指向 php.ini 目录位置,然后重新启动 httpd 应该可以正确解析 php,虚拟机应该工作在 vpopmail:vchkpw 用户组下。

重要的提示:
可以通过 suexec -V 命令查看 suexec 的编译配置:

[[email protected] conf.d]# suexec -V
 -D AP_DOC_ROOT="/var/www"
 -D AP_GID_MIN=100
 -D AP_HTTPD_USER="apache"
 -D AP_LOG_EXEC="/var/log/httpd/suexec.log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=500
 -D AP_USERDIR_SUFFIX="public_html"

注意 AP_DOC_ROOT 以及 AP_GID_MIN AP_UID_MIN 对配置影响很大。

Incoming search terms:

Tags: PHP, FastCGI, suexec

本文地址: http://blog.21andy.com/20071122/685.html