如何建立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/ 接下來我們打開:/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] 的部分: [...] 然後我們就可以安裝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
wget http://centos.karan.org/kbsingh-CentOS-Extras.repo
[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
# 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/php.ini... vi /etc/php.ini 並增加 cgi.fix_pathinfo = 1 到文件末尾:
/etc/init.d/httpd restart
[...]
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 然後我們創建文檔的根用戶和組的頁面: mkdir -p /var/www/web1/web 我們將運行PHP使用suExec,suExec目錄在root is /var/www,以下命令顯示: /usr/sbin/suexec -V root@server1 ~]# /usr/sbin/suexec -V
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
chown web1:web1 /var/www/web1/web
mkdir -p /var/www/web2/web
chown web2:web2 /var/www/web2/web
-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 vi /var/www/php-fcgi-scripts/web1/php-fcgi-starter
mkdir -p /var/www/php-fcgi-scripts/web2
#!/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 現在我們創建兩個阿帕奇虛擬主機,www.example1.com 和www.example2.com.容許他們在/etc/httpd/conf/httpd.conf: vi /etc/httpd/conf/httpd.conf [...] 確認你的文件正確, 然後加載阿帕奇: /etc/init.d/httpd reload 4 現在我們創建php5 測試文件到頁面中: vi /var/www/web1/web/info.php
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
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>
<?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/