Библиотека сайта 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. Ссылки