Сервер 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 можно организовать «безопасный» удаленный доступ к файлам этого виртуального хоста.