4

サーバー

現在のプロジェクトをホストするために使用している開発サーバーがあります。ここにいくつかの統計があります:

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

問題

私はPHP5.3.3を使用して実行していますが、うまく機能しmod_php5ています。しかし、サーバー上の1つのVHに対してPHP 5.2.11を実行する必要があるため、phpfarmを使用してPHP5.2.11をコンパイルしました。このVHを除くサーバー上のすべてにmod_php5を使用するようにApacheを構成したいと思います。FastCGIを介してこの1つのVHに対してPHP5.2.11を実行します。

私のテスト

テストとして、Apacheのデフォルトサイトを使用しています/var/www。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

4

2 に答える 2

2

良い代替手段はsuPHPです。

適切に設定されていれば、必要な数のハンドラーを使用できます。仮想ホスト内の異なるディレクトリでも。

セキュリティを強化するために、Unixユーザーとグループを仮想ホストに割り当てるsuPHPの「パラノイド」モードがあり、スクリプトはそのユーザーとして実行されます。

私の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...

お役に立てば幸いです。

于 2010-12-15T17:53:41.630 に答える
0

問題は、CGIハンドラーがvhostに設定されている場合mod_phpでも、ファイルを処理することです。.php

これを修正するに<Directory>は、vhost内にSetHandlerディレクティブが必要です。

  Action php-cgi /cgi-bin-php/php-cgi-5.2.11
  <FilesMatch \.php$>
    SetHandler php-cgi
  </FilesMatch>
</Directory>

チュートリアルを更新しました。

于 2011-08-12T05:30:13.610 に答える