如何建立mod_fcgid Apache2中支持php5在CentOS 5.6上

如何建立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.comwww.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 链接:

  • mod_fcgid: http://fastcgi.coremail.cn/
  • Apache: http://httpd.apache.org/
  • PHP: http://www.php.net/
  • CentOS: http://www.centos.org/

你可能感兴趣的:(centos,职场,apache2,休闲,建立mod_fcgid)