安装Ubuntu-VPS以mod_fcgid方式运行PHP

本教程将引导你在Ubuntu 10.04 server上安装以mod_fcgid方式运行的LAMP虚拟主机。

  假定VPS已正确设置了主机名和IP。

  输入以下命令,进入root特权模式:

  sudo su

  1、安装前准备

  确保 /bin/sh的符号连接至 /bin/bash ,而不是连接到 /bin/dash

  dpkg-reconfigure dash

  Install dash as /bin/sh? <-- 选择No

  为了保证安装成功,需要禁用AppArmor

  /etc/init.d/apparmor stop

  update-rc.d -f apparmor remove

  aptitude remove apparmor apparmor-utils

  2、安装 Apache2/mod_fcgi/PHP5

  aptitude install apache2 apache2-suexec libapache2-mod-fcgid php5-cgi

  Apache默认以模块方式运行PHP,需要输入以下命令禁用此模式

  a2dismod php5

  然后启用以下模块

  a2enmod rewrite

  a2enmod suexec

  a2enmod include

  a2enmod fcgid

  编辑/etc/php5/cgi/php.ini文件

  vi /etc/php5/cgi/php.ini

  将cgi.fix_pathinfo = 1一行前的分号(注释符号)删掉

  在/etc/apache2/mods-available/fcgid.conf中插入一行“PHP_Fix_Pathinfo_Enable 1”,插入后如下:

<IfModule mod_fcgid.c>
  AddHandler    fcgid-script .fcgi
  FcgidConnectTimeout 20
  PHP_Fix_Pathinfo_Enable 1
</IfModule>

  重启Apache

  /etc/init.d/apache2 restart

  3、创建虚拟主机(站点)

  拟将创建2个虚拟主机(站点):

  www1.sudu.cn(站点根目录/var/www/vh123456/web)

  www2.sudu.cn(站点根目录/var/www/vh654321/web)

  为两个站点创建用户(组)

  groupadd vh123456

  groupadd vh654321

  useradd -s /bin/false -d /var/www/vh123456 -m -g vh123456 vh123456

  useradd -s /bin/false -d /var/www/vh654321 -m -g vh654321 vh654321

  为两个站点创建目录

  mkdir -p /var/www/vh123456/web

  chown vh123456:vh123456 /var/www/vh123456/web

  mkdir -p /var/www/vh654321/web

  chown vh654321:vh654321 /var/www/vh654321/web

  以suExec方式运行PHP,suExec默认限定应用程序只能打开/var/www目录下的文件,使用以下命令可查看:

  # /usr/lib/apache2/suexec -V

  -D AP_DOC_ROOT="/var/www"

  -D AP_GID_MIN=100

  -D AP_HTTPD_USER="www-data"

  -D AP_LOG_EXEC="/var/log/apache2/suexec.log"

  -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"

  -D AP_UID_MIN=100

  -D AP_USERDIR_SUFFIX="public_html"

  由于PHP二进制程序的路径(/usr/lib/cgi-bin/php)在suExec限定的范围之外,suExec也不允许通过符号连接来访问,唯一的解决方法是在每一个站点目录下(即/var/www的子目录)创建一个wrapper脚本,由该脚本完成PHP二进制程序的调用,该脚本文件的属主和属组必须设定为该网站的用户账号。

  例如,在/var/www/php-fcgi-scripts目录下创建这些脚本文件

  mkdir -p /var/www/php-fcgi-scripts/vh123456

  mkdir -p /var/www/php-fcgi-scripts/vh654321

  vi /var/www/php-fcgi-scripts/vh123456/php-fcgi-starter

  vi /var/www/php-fcgi-scripts/vh654321/php-fcgi-starter

  新增编辑文件,内容如下:

  #!/bin/sh

  PHPRC=/etc/php5/cgi/

  export PHPRC

  export PHP_FCGI_MAX_REQUESTS=5000

  export PHP_FCGI_CHILDREN=8

  exec /usr/lib/cgi-bin/php

  PHPRC参数表示包含php.ini配置文件的目录路径,稍后介绍自定义php.ini会用到。

  PHP_FCGI_MAX_REQUESTS参数表示一个fcgid进程结束前,另外一个进程开始之前,能够执行的最大请求数目。

  PHP_FCGI_CHILDREN参数定义子进程的数量。

  php-fcgi-starter scripts要保证权限为可执行:

  chmod 755 /var/www/php-fcgi-scripts/vh123456/php-fcgi-starter

  chmod 755 /var/www/php-fcgi-scripts/vh123456/php-fcgi-starter

  chown -R vh123456:vh123456 /var/www/php-fcgi-scripts/vh123456

  chown -R vh654321:vh654321 /var/www/php-fcgi-scripts/vh654321

  接下来,为www1.sudu.cn和www2.sudu.cn两个站点,在Apache上创建配置文件,这里只列出一个站点的配置细节:

vi /etc/apache2/sites-available/vh123456
<VirtualHost *:80>
  ServerName www1.sudu.cn
  ServerAlias 1.sudu.cn
  ServerAdmin [email protected]
  DocumentRoot /var/www/vh123456/web/
  <IfModule mod_fcgid.c>
    SuexecUserGroup vh123456 vh123456
    <Directory /var/www/vh123456/web/>
      Options +ExecCGI
      AllowOverride All
      AddHandler fcgid-script .php
      FCGIWrapper /var/www/php-fcgi-scripts/vh123456/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>

  输入以下命令,启用该站点

  a2ensite vh123456

  同样的方法设置好另外一个站点后,重新加载Apache配置

  /etc/init.d/apache2 reload

  4、测试

vi /var/www/vh123456/web/env.php
<?php
phpinfo();
?>

  在浏览器中请求这个文件(http://www1.sudu.cn/env.php),如果Server API一行显示CGI/FastCGI则表示成功。

  5、自定义php.ini

  将默认php.ini文件拷贝至网站目录下

  cp /etc/php5/cgi/php.ini /var/www/vh123456/

  chown vh123456:vh123456 /var/www/vh123456/php.ini

  将上文提到的/var/www/php-fcgi-scripts/vh123456/php-fcgi-starter文件,PHPRC参数修改如下:

  vi /var/www/php-fcgi-scripts/vh123456/php-fcgi-starter

  #!/bin/sh

  PHPRC=/var/www/vh123456/

  export PHPRC

  export PHP_FCGI_MAX_REQUESTS=5000

  export PHP_FCGI_CHILDREN=8

  exec /usr/lib/cgi-bin/php

  修改后重新加载Apache配置生效

  /etc/init.d/apache2 reload

  检查phpinfo,http://www1.sudu.cn/env.php

  Loaded Configuration File一行会显示加载的php.ini路径,如果自定义php.ini成功,这个参数应该是/var/www/vh123456/php.ini

  

showpic.gif

分享到
表个态吧 赞(0)