如何建立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 鏈接:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章