Библиотека сайта rus-linux.net
Ошибка базы данных: Table 'a111530_forumnew.rlf1_users' doesn't exist
Настраиваем Apache2 с mod_fcgid и PHP5 на Ubuntu 8.10
Оригинал: How To Set Up Apache2 With mod_fcgid And PHP5 On 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. Поэтому проделаем следующее:
ln -sf /bin/bash /bin/sh
В дополнение к этому, отключим AppArmor:
/etc/init.d/apparmor stop update-rc.d -f apparmor remove apt-get remove apparmor apparmor-utils
2. Установка Apache2/mod_fcgid/PHP5
Чтобы установить Apache2, mod_fcgid и PHP5, запустите следующую команду:
apt-get install apache2 apache2-suexec libapache2-mod-fcgid php5-cgi
Если 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.
Сперва создадим пользователей и группы:
groupadd web1 groupadd web2 useradd -s /bin/false -d /var/www/web1 -m -g web1 web1 useradd -s /bin/false -d /var/www/web2 -m -g web2 web2
Теперь создадим корневые каталоги и и назначим им соответствующих владельцев:
mkdir -p /var/www/web1/web chown web1:web1 /var/www/web1/web mkdir -p /var/www/web2/web chown web2:web2 /var/www/web2/web
Запускать PHP мы будем с помощью suExec. Корневым каталогом для suExec является /var/www, в чём можно убедиться, запустив следующую команду:
root@server1:~# /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" root@server1:~#
По этой причине мы не сможем вызвать интерпретатор 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.
mkdir -p /var/www/php-fcgi-scripts/web1 mkdir -p /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 должны быть исполнимыми; кроме того, они (и каталоги, в которых скрипты размещаются) должны принадлежать тем же пользователю и группе, которым принадлежит веб-сайт:
chmod 755 /var/www/php-fcgi-scripts/web1/php-fcgi-starter chmod 755 /var/www/php-fcgi-scripts/web2/php-fcgi-starter chmod -R web1:web1 /var/www/php-fcgi-scripts/web1 chmod -R web2:web2 /var/www/php-fcgi-scripts/web2
Теперь настроим виртуальные хосты 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 использовать его:
cp /etc/php5/cgi/php.ini /var/www/web2 chown web2:web2 /var/www/web2/php.ini
(Вы можете изменить /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. Ссылки
