Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Ошибка базы данных: Table 'a111530_forumnew.rlf1_users' doesn't exist
На главную -> MyLDP -> Тематический каталог -> Серверные службы Linux

Настраиваем 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:

info.php

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:

info.php

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:

info.php

7. Ссылки



Комментарии