如何建立mod_fcgid Apache2支持php5 在CentOS 5.6的使用:
这篇教程主要讲述如何使用php5 与mod_fcgid Apache2 CentOS 5.6. 的兼容性,让你的脚本执行你的权限,但我不敢保证这个方法对你也适用。
1 、适用一个CentOS 5.6服务器,主机 server1.example.和IP地址 192.168.0.100。
这一课中我要架设两个阿帕奇主机上进行指导,www.example1.comand和 comwww.example2.com.来说明mod_fcgid的使用。
开始前我们确保确保SELinux被禁用,
system-config-securitylevel
关闭SELinux
setenforce 0
更改生效。
2 安装 Apache2/mod_fcgi/使用PHP5进行编写。
mod_fcgi没有的情况下,可以到在官方CentOS,但有一包的CentOS 5.倍centos.karan.orgtesting测试repository. 库。我们使库如下:
cd /etc/yum.repos.d/
wget http://centos.karan.org/kbsingh-CentOS-Extras.repo
接下来我们打开:/etc/yum.repos.d/kbsingh-CentOS-Extras.repo...
vi /etc/yum.repos.d/kbsingh-CentOS-Extras.repo
设置:set gpgcheck to 0和enabled to 1 在[kbs-CentOS-Testing] 的部分:
[...]
[kbs-CentOS-Testing]
name=CentOS.Karan.Org-EL$releasever - Testing
gpgcheck=0
gpgkey=http://centos.karan.org/RPM-GPG-KEY-karan.org.txt
enabled=1
baseurl=http://centos.karan.org/el$releasever/extras/testing/$basearch
然后我们就可以安装Apache2, mod_fcgid, 和PHP5。
yum install httpd mod_fcgid php-cli
如果阿帕奇已经安装支持php5 的模块,那现在就使用php5 编辑打开/etc/httpd/conf.d/php.conf...:
vi /etc/httpd/conf.d/php.conf
一切配置所需都早下面那个文件里:
PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#
#<IfModule prefork.c>
# LoadModule php5_module modules/libphp5.so
#</IfModule>
#<IfModule worker.c>
# # Use of the "ZTS" build with worker is experimental, and no shared
# # modules are supported.
# LoadModule php5_module modules/libphp5-zts.so
#</IfModule>
#
#
# Cause the PHP interpreter to handle files with a .php extension.
#
#AddHandler php5-script .php
#AddType text/html .php
#
#
# Add index.php to the list of files that will be served as directory
# indexes.
#
#DirectoryIndex index.php
#
#
# Uncomment the following line to allow PHP to pretty-print .phps
# files as PHP source code:
#
#AddType application/x-httpd-php-source .phps
然后我们创建启动环节:
chkconfig --levels 235 httpd on
/etc/init.d/httpd restart
接下来我们打开/etc/php.ini...
vi /etc/php.ini
并增加 cgi.fix_pathinfo = 1 到文件末尾:
[...] cgi.fix_pathinfo = 1
重新加载阿帕奇:
/etc/init.d/httpd reload
3 创建主机名www.example1.com 和www.example2.com。
现在创建两个虚拟主机 www.example1.com (文档跟目录 /var/www/web1/web)和www.example2.com (文档目录在/var/www/web2/web)我们将创建有两个虚拟主机用户和组的权限:
现在我们创建用户和组:
groupadd web1
groupadd web2
useradd -s /bin/false -d /var/www/web1 -m -g web1 web1
useradd -s /bin/false -d /var/www/web2 -m -g web2 web2
chmod 755 /var/www/web1
chmod 755 /var/www/web2
然后我们创建文档的根用户和组的页面:
mkdir -p /var/www/web1/web
chown web1:web1 /var/www/web1/web
mkdir -p /var/www/web2/web
chown web2:web2 /var/www/web2/web
我们将运行PHP使用suExec,suExec目录在root is /var/www,以下命令显示:
/usr/sbin/suexec -V
root@server1 ~]# /usr/sbin/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"
[root@server1 ~]#
因此我们不能直接使用php5,(/usr/bin/php-cgi)因为 suExec在目录之外。其中suExec不容许有符号链接,解决问题的唯一方法为创建一个每个网站的子目录/var/www,我们需创建其中的子目录,/var/www/php-fcgi-scripts, e.g. /var/www/php-fcgi-scripts/web1 和 /var/www/php-fcgi-scripts/web2.
mkdir -p /var/www/php-fcgi-scripts/web1
mkdir -p /var/www/php-fcgi-scripts/web2
vi /var/www/php-fcgi-scripts/web1/php-fcgi-starter
#!/bin/sh PHPRC=/etc/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/bin/php-cgi
vi /var/www/php-fcgi-scripts/web2/php-fcgi-starter
#!/bin/sh PHPRC=/etc/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/bin/php-cgi
这PHPRC包含的目录 php.ini你只有文件位于 i.e., /etc/ translates to /etc/php.ini,PHP_FCGI_MAX_REQUESTS 多前要求一个fcgid过程停止和一个新的启动,PHP_FCGI_CHILDREN 定义php 目录启动的数目:
这php-fcgi-starter脚本 ,必须是可执行的,在他们所有网站和目录:
chmod 755 /var/www/php-fcgi-scripts/web1/php-fcgi-starter
chmod 755 /var/www/php-fcgi-scripts/web2/php-fcgi-starter
chown -R web1:web1 /var/www/php-fcgi-scripts/web1
chown -R web2:web2 /var/www/php-fcgi-scripts/web2
现在我们创建两个阿帕奇虚拟主机,www.example1.com 和www.example2.com.容许他们在/etc/httpd/conf/httpd.conf:
vi /etc/httpd/conf/httpd.conf
[...]
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.example1.com
ServerAlias example1.com
ServerAdmin [email protected]
DocumentRoot /var/www/web1/web/
<IfModule mod_fcgid.c>
SuexecUserGroup web1 web1
PHP_Fix_Pathinfo_Enable 1
<Directory /var/www/web1/web/>
Options +ExecCGI
AllowOverride All
AddHandler fcgid-script .php
FCGIWrapper /var/www/php-fcgi-scripts/web1/php-fcgi-starter .php
Order allow,deny
Allow from all
</Directory>
</IfModule>
# ErrorLog /var/log/apache2/error.log
# CustomLog /var/log/apache2/access.log combined
ServerSignature Off
</VirtualHost>
<VirtualHost *:80>
ServerName www.example2.com
ServerAlias example2.com
ServerAdmin [email protected]
DocumentRoot /var/www/web2/web/
<IfModule mod_fcgid.c>
SuexecUserGroup web2 web2
PHP_Fix_Pathinfo_Enable 1
<Directory /var/www/web2/web/>
Options +ExecCGI
AllowOverride All
AddHandler fcgid-script .php
FCGIWrapper /var/www/php-fcgi-scripts/web2/php-fcgi-starter .php
Order allow,deny
Allow from all
</Directory>
</IfModule>
# ErrorLog /var/log/apache2/error.log
# CustomLog /var/log/apache2/access.log combined
ServerSignature Off
</VirtualHost>
确认你的文件正确,
然后加载阿帕奇:
/etc/init.d/httpd reload
4 现在我们创建php5 测试文件到页面中:
vi /var/www/web1/web/info.php
<?php phpinfo(); ?>
然后保存,打开浏览器,如果返回的就像我们看到的那样,那就很正确啦:
5 定制php 脚本到每个web页面,
每个网站都有自己的 php.ini 文件,只有为不同的文件,来定义不同的文件名,我们定义如下:
vi /var/www/php-fcgi-scripts/web2/php-fcgi-starter
#!/bin/sh PHPRC=/etc/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/bin/php-cgi -d magic_quotes_gpc=off
然后加载阿帕奇
/etc/init.d/httpd reload
返回的页面信息为下图,就让如我们看到的那样:
7 链接: