Как я могу сказать Apache2, запустить mod_php5 по умолчанию, но запустить этот VH в режиме CGI? - PullRequest
4 голосов
/ 15 декабря 2010

Сервер

У меня есть сервер разработки, который я использую для размещения своих текущих проектов. Вот некоторые характеристики:

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

Проблема

Я использую PHP 5.3.3, используя mod_php5, и он отлично работает. Но мне нужно запустить PHP 5.2.11 только для одного VH на сервере, поэтому я использовал phpfarm для компиляции PHP 5.2.11. Я хочу настроить Apache для использования mod_php5 для всего на сервере, кроме этого VH. Я запусту PHP 5.2.11 для этого VH поверх FastCGI.

Мой тест

В качестве теста я использую сайт Apache по умолчанию на /var/www. Я настроил следующие файлы каталогов, чтобы сообщать мне версии PHP:

  • / вар / WWW / phpinfo.php
  • / вар / 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

Ответы [ 2 ]

2 голосов
/ 15 декабря 2010

Хорошая альтернатива - 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...

Надеюсь, это поможет.

0 голосов
/ 12 августа 2011

Проблема в том, что mod_php по-прежнему обрабатывает .php файлы, даже если для обработчика CGI задан vhost.

Чтобы исправить это, <Directory> в vhost должен иметь директиву SetHandler:

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

Я обновил учебник .

...