Библиотека сайта или "Мой Linux Documentation Project"
"Linux по-русски". Настраиваем Apache2 с mod_fcgid и PHP5 на Ubuntu 8.10
Настраиваем Apache2 с mod_fcgid и PHP5 на Ubuntu 8.10
Оригинал:
Автор: Фалко Тимме (Falko Timme)
Дата: 29 января 2009 г.
Перевод: Сергей Супрунов
Дата перевода: 30 марта 2009 г.
В этом руководстве описана установка Apache2 с mod_fcgid и PHP5 на Ubuntu 8.10. Модуль mod_fcgid - это альтернатива более старому mod_fastcgi, совместимая с ним. Он позволяет вам выполнять сценарии PHP с правами их владельцев, а не пользователя, от имени которого запущен Apache.
Я не гарантирую, что приведённые здесь шаги на 100% будут работать и у вас!
1. Предварительные замечания
В этом руководстве я использую сервер Ubuntu 8.10 с именем хоста server1.example.com и IP-адресом 192.168.0.100.
Чтобы продемонстрировать использование mod_fcgid, я покажу, как создать два виртуальных хоста Apache - www.example1.com и www.example2.com.
Убедитесь, что вы вошли в систему с правами пользователя root:
sudo su
У нас /bin/sh является символьной ссылкой на /bin/dash, однако нам нужна оболочка /bin/bash, а не /bin/dash. Поэтому проделаем следующее:
Если Apache2 у вас уже установлен с поддержкой PHP5 в качестве модуля, отключите этот модуль:
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:
Теперь перезагрузите Apache:
/etc/init.d/apache2 force-reload
3. Настройка виртуальных хостов www.example1.com и www.example2.com
Теперь я создам два виртуальных хоста, www.example1.com (с корнем документа /var/www/web1/web) и www.example2.com (с корнем в /var/www/web2/web). Хост www.example1.com будет принадлежать пользователю и группе web1, а www.example2.com - пользователю и группе web2.
По этой причине мы не сможем вызвать интерпретатор PHP (/usr/lib/cgi-bin/php) непосредственно, поскольку размещается он за пределами корневого каталога suExec. Поскольку suExec не позволяет использование символьных ссылок, то единственным способом решить эту проблему будет создание скрипта-обёртки для каждого веб-сайта в подкаталогах каталога /var/www. Единственной задачей скрипта-обёртки будет запуск двоичного файла /usr/lib/cgi-bin/php. Этот скрипт должен принадлежать тем пользователю и группе, которые являются владельцами соответствующего веб-сайта, поэтому нам понадобятся отдельные скрипты для каждого сайта. Я буду размещать скрипты-обёртки в подкаталогах каталога /var/www/php-fcgi-scripts, т.е. в /var/www/php-fcgi-scripts/web1 и /var/www/php-fcgi-scripts/web2.
vi /var/www/php-fcgi-scripts/web1/php-fcgi-starter
vi /var/www/php-fcgi-scripts/web2/php-fcgi-starter
[Вы, надеюсь, просто скопируете созданный скрипт из первого каталога во второй - прим.перев.]
Строка PHPRC указывает на каталог, где размещён файл php.ini (т.е. /etc/php5/cgi транслируется в /etc/php5/cgi/php.ini). PHP_FCGI_MAX_REQUESTS задаёт максимальное число запросов, после обработки которого процесс fcgid будет остановлен и запущен заново. PHP_FCGI_CHILDREN определяет число дочерних процессов PHP, которые будут запущены.
Скрипты php-fcgi-starter должны быть исполнимыми; кроме того, они (и каталоги, в которых скрипты размещаются) должны принадлежать тем же пользователю и группе, которым принадлежит веб-сайт:
Теперь настроим виртуальные хосты www.example1.com и www.example2.com в конфигурации Apache:
vi /etc/apache2/sites/available/web1
a2ensite web1
vi /etc/apache2/sites-available/web2
a2ensite web2
Проверьте, что вы указали правильные пути (а также пользователя и группу в строке SuexecUserGroup).
Перезагрузите Apache:
/etc/init.d/apache2 reload
4. Тестирование
Теперь создадим небольшой тестовый PHP-файл, например, для сайта www.example1.com:
vi /var/www/web1/web/info.php
И вызовем этот файл из браузера (http://www.example1.com/info.php). Если всё правильно, результат будет похож на приведённый на рисунке, и вы увидите CGI/FastCGI в строке Server API:
5. Свой php.ini для каждого веб-сайта
Поскольку для каждого веб-сайта существует собственный скрипт-обёртка php-fcgi-starter, можно определить различные файлы php.ini для каждого сайта. Для демонстрации этого я скопирую /etc/php5/cgi/php.ini в каталог /var/www/web2 и заставлю www.example2.com использовать его:
(Вы можете изменить /var/www/web2/php.ini так, как вам хочется.)
Теперь откроем /var/www/php-fcgi-scripts/web2/php-fcgi-starter:
vi /var/www/php-fcgi-scripts/web2/php-fcgi-starter
Здесь нужно внести изменения в строку PHPRC:
Перезагрузите Apache:
/etc/init.d/apache2 reload
Создайте тестовый файл для www.example2.com:
vi /var/www/web2/web/info.php
Вызовите его из браузера (http://www.example2.com/info.php). Строка Loaded Configuration File должна указывать на /var/www/web2/php.ini:
6. Модификация отдельных параметров PHP
Вместо того чтобы для каждого веб-сайта готовить целиком новый php.ini, вы можете изменить отдельные параметры конфигурации PHP в скрипте php-fcgi-starter (или использовать оба способа одновременно), добавив ключ -d в команду вызова PHP. Например, если мне захочется отключить опцию magic_quotes_gpc для www.example2.com, я выполню следующее:
vi /var/www/php-fcgi-scripts/web2/php-fcgi-starter
Перезагрузите Apache:
/etc/init.d/apache2 reload
Если сейчас вы вызовите скрипт info.php (http://www.example2.com/info.php) и найдёте строку magic_quotes_gpc, она должна быть в состоянии Off:
7. Ссылки
Эта статья еще не оценивалась
Вы сможете оценить статью и оставить комментарий, если
войдете или зарегистрируетесь.
Только зарегистрированные пользователи могут оценивать и комментировать статьи.