我怎么能告诉Apache2,默认运行mod_php5但是在CGI模式下运行这个VH?

服务器

我有一个开发服务器,我用来托管我当前的项目.以下是一些统计数据:

root@myserver:/usr/bin $cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.10
DISTRIB_CODENAME=maverick
DISTRIB_DESCRIPTION="Ubuntu 10.10"
root@myserver:/usr/bin $apache2 -v
Server version: Apache/2.2.16 (Ubuntu)
Server built:   Nov 18 2010 21:17:43
root@myserver:/usr/bin $php --version
PHP 5.3.3-1ubuntu9.1 with Suhosin-Patch (cli) (built: Oct 15 2010 14:00:18)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
root@myserver:/usr/bin $uname -r
2.6.35-22-server

问题

我正在使用mod_php5运行PHP 5.3.3并且它运行良好.但我需要在服务器上只为一个VH运行PHP 5.2.11,所以我使用phpfarm来编译PHP 5.2.11.我想配置Apache使用mod_php5来处理服务器上的所有内容,除了这个VH.我将通过FastCGI为这一个VH运行PHP 5.2.11.

我的测试

作为测试,我在/ var / www使用Apache的默认站点.我设置了以下目录文件来向我报告PHP版本:

> /var/www/phpinfo.php
> /var/www/php-5.2.11/phpinfo.php

我的目标是让/var/www/phpinfo.php显示我的版本5.3.3(mod_php5)并让/var/www/php-5.2.11/phpinfo.php显示我5.2.11(CGI).这还没有用.

我插入了以下代码/etc/apache2/httpd.conf:

FastCgiServer /var/www/cgi-bin/php-cgi-5.2.11
ScriptAlias /cgi-bin-php/ /var/www/cgi-bin/

我将以下代码插入到默认站点的VH定义中:

<Directory /var/www/php-5.2.11/>
    AddHandler php-cgi .php
    Action php-cgi /cgi-bin-php/php-cgi-5.2.11
</Directory>

结果

启用mod_php5:

> /var/www/phpinfo.php —> 5.3.3(mod_php5)
> /var/www/php-5.2.11/phpinfo.php —> 5.3.3(mod_php5)

禁用mod_php5:

> /var/www/phpinfo.php —>没有处理者; Firefox尝试下载PHP文件
> /var/www/php-5.2.11/phpinfo.php —> 5.2.11(CGI)

涉及的文件

http://files.mattalexander.me/apacheconfig.tgz

解决方法:

一个很好的选择是suPHP.

如果设置正确,您可以根据需要拥有尽可能多的处理程序;甚至是虚拟主机中的不同目录.

为了增加安全性,有suPHP的“偏执”模式,您可以将Unix用户和组分配给虚拟主机,脚本将作为该用户运行.

我的suPHP配置看起来像这样:

...

[handlers]
;Handler for php-scripts
x-httpd-php=php:/usr/bin/php4-cgi
x-httpd-php5=php:/usr/bin/php5-cgi

;Handler for CGI-scripts
x-suphp-cgi=execute:!self

...

在一个简单的.htaccess文件中,可以使用不同版本的PHP运行脚本:

<FilesMatch \.php$>
   SetHandler x-httpd-php
</FilesMatch>

<FilesMatch \.php5$>
   SetHandler x-httpd-php5
</FilesMatch>

# etc...

希望有所帮助.

上一篇:制作centos镜像,启动镜像可以访问本地百度页面


下一篇:javascript – CGI如何识别编译器?