Установка и настройка Apache2 с модулем mod_fcgid

Сервер Apache2 — это один из немногих веб-серверов, который обладает огромными возможностями. В данной статье показан один из вариантов настройки данного сервера. При такой настройке разные сайты будут запускаться от разных пользователей, кроме того для каждого из сайтов можно иметь свой файл настроек php.ini, что особенно актуально при работе с PHP5.3.

Итак поднимем сервер Apache2 с модулем mod_fcgid на Ubuntu 10.04.

Устанавливаем необходимые пакеты:

#aptitude install apache2 apache2-suexec libapache2-mod-fcgid php5-cgi

Отключаем mod-php, вдруг он у нас включен 🙂 :

#a2dismod php5

Включаем необходимые модули:

#a2enmod rewrite
#a2enmod suexec
#a2enmod include
#a2enmod fcgid

Для нормальной работы с PATH_INFO/PATH_TRANSLATED исправляем конфигурацию /etc/php5/cgi/php.ini .

[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=1
[…]

Исправляем конфигурацию /etc/apache2/mods-available/fcgid.conf для включения cgi.fix_pathinfo:

<IfModule mod_fcgid.c>
 AddHandler    fcgid-script .fcgi
 FcgidConnectTimeout 20
 PHP_Fix_Pathinfo_Enable 1
</IfModule>

Для вступления изменений в силу необходимо перезагрузить сервер. Для этого выполняем команду:

#service apache2 restart

Для работы в безопасном окружении необходимо создать пользователей от имени которых будет запускаться и работать связка Apache2+fcgid. Создадим группу и пользователя. Но в начале сделаем каталог, где будут располагаться файлы сайтов.

#mkdir -p /var/www/web1/web
#groupadd web1
#useradd -s /bin/false -d /var/www/web1 -m -g web1 web1
#chown web1:web1 /var/www/web1/web

Необходимо написать скрипт запуска, так бинарный код расположенный вне пределах корневого каталога не будет запускаться, а символические ссылки не работают в suExec режиме.
Создаем каталог в котором будет расположен наш скрипт:

#mkdir -p /var/www/php-fcgi-scripts/web1

Создаем скрипт запускаем редактор:

#nano /var/www/php-fcgi-scripts/web1/php-fcgi-starter

и вставляем следующие строки:

#!/bin/sh
PHPRC=/etc/php5/cgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/lib/cgi-bin/php

Скрипты должны принадлежать созданному нами пользователю и у него должно хватать прав на выполнение данногоa2ensite web1 скрипта:

#chmod 755 /var/www/php-fcgi-scripts/web1/php-fcgi-starter
#chown -R web1:web1 /var/www/php-fcgi-scripts/web1

Создаем конфигурационный файл виртуального хоста Apache.
Запускаем редактор:

#nano /etc/apache2/sites-available/web1

и создаем конфигурацию виртуального хоста:

<VirtualHost *:80>
 ServerName testing.intelsib.ru
 ServerAdmin webmaster@testing.intelsib.ru
 DocumentRoot /var/www/web1/web/
 <IfModule mod_fcgid.c>
    SuexecUserGroup web1 web1
    <Directory /var/www/web1/web/>
       Options +ExecCGI
       AllowOverride All
       AddHandler fcgid-script .php
       FCGIWrapper /var/www/php-fcgi-scripts/web1/php-fcgi-starter .php
       Order allow,deny
       Allow from all
    </Directory>
 </IfModule>
 # ErrorLog /var/log/apache2/error-testing.log
 # CustomLog /var/log/apache2/access-testing.log combined
 ServerSignature Off
</VirtualHost>

Подключим нашу конфигурацию к основной конфигурации Apache2:

#a2ensite web1

Для вступления изменений в силу перезагрузим веб-сервер командой:

#service apache2 restart

Для проверки настроек созданного виртуального хоста создадим файл с вызовом функции phpinfo() в корневом каталоге сайта.
Запускаем редактор:

#nano /var/www/web1/web/info.php

и вписываем в файл такой код:

<?php
phpinfo();
?>

В таком режиме работы Apache2 можно задавать для каждого виртуального хоста свой конфигурационный файл PHP.
Реализуем эту возможность. Скопируем основной файл конфигурации PHP CGI в  домашний каталог пользователя, выставим права на файл.

#cp /etc/php5/cgi/php.ini /var/www/web1/
#chown web1:web1 /var/www/web1/php.ini

Укажем этот каталог в скрипте запуска.

#nano /var/www/php-fcgi-scripts/web1/php-fcgi-starter

и вставляем в него такую строчку:

#!/bin/sh
PHPRC=/var/www/web1/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/lib/cgi-bin/php

Перезагружаем наш сервер:

#service apache2 restart

Открываем страницу info.php нашего сайта и проверяем его настройки.

В следующей статье будет показано, как с помощью jailkit можно организовать «безопасный» удаленный доступ к файлам этого виртуального хоста.

 

 

 

Добавить комментарий