PHP fastcgi на Debian


PHP fastcgi является одним из режимов работы PHP с Apache. В рамках материала будет рассмотрено как выполнить конфигурацию с нуля.



Настройку будем производить на сервере с операционной системой Debian. Из репозитория для нее ставится PHP версии 7 с PHP в качестве модуля Apache. Модуль при этом можно всегда отключить и выбрать какую-то другую конфигурацию.

Для северов с большим количеством пользователей лучшим выбором часто является fastcgi. Модуль позволяет организовать выполнение PHP процессов от имени пользователей, что позволяет их легко распознавать и делать администрирование сервера удобным.



Debian Fastcgi c веб-сервером Apache


Обновляем список репозиториев. Все необходимые пакеты устанавливаются из стандартных репозиториев, подключать какие-либо дополнительные не требуется.

apt-get update



Устанавливаем веб-сервер и пакет php

apt-get install apache2

apt-get install php



Для тестирования того удалась ли настройка создадим виртуальный хост Apache, тестовый код будет открываться при обращении к имени site.ru

cd /etc/apache2/sites-available/

cp 000-default.conf site.ru



Отредактируем файл. В качестве ServerName указываем site.ru, в качестве DocumentRoot /var/www/web. Других настроек не требуется.

mcedit site.ru



В /var/www/web размещаем index.php с тестовым кодом

mcedit index.php

<?php

phpinfo();

?>



Вносим изменения в /etc/hosts ставя в соответствие имени site.ru IP адрес сервера (его узнаем из ip a)


Активируем виртуальный хост

a2ensite site.ru



Требуется перезапустить веб-сервер чтобы изменения вступили в силу

systemctl restart apache2



Настройка работы с модулем PHP fastcgi


Все активные модули можно посмотреть в каталоге mods-enabled, они представлены в виде ссылок

ls -la /etc/apache2/mods-enabled/



Выключаем php7.0, по умолчанию PHP работает именно как модуль Apache, сейчас этот модуль не нужен и его функции будет выполнять fcgid

a2dismod php7.0



Перезапустим Apache

systemctl restart apache2



Потребуются дополнительные пакеты

apt-get install php7.0-mysql php7.0-curl php7.0-json php7.0-cgi php7.0 libapache2-mod-php7.0

apt-get install libapache2-mod-fcgid



Модуль следует активировать, и вновь перезапустить веб-сервер

a2enmod fcgid

systemctl restart apache2



Конфигурационный файл только что активированного модуля выглядит так

less /etc/apache2/mods-available/fcgid.conf

<Location />
AddHandler fcgid-script .php
Options +ExecCGI
FcgidWrapper /usr/bin/php-cgi .php
</Location>



Бинарный файл php можно вычислить используя which (это может потребоваться если что-то не работает как должно, сейчас можно пропустить)

which php

/usr/bin/php -v



Дефолтный конфигурационный файл можно посмотреть, заключительную секцию, приведенную ниже нужно раскомментирвоать

mcedit /etc/apache2/conf-available/php7.0-cgi.conf


ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
Action application/x-httpd-php /cgi-bin/php7.0



Если при перезапуске Apache возникают ошибки смотрим подробную информацию следующим образом

systemctl status apache2.service



Нужно включить модуль actions

a2enmod actions



Активируем конфигурационный файл php7.0-cgi

a2enconf php7.0-cgi



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

a2enmod cgi

a2enmod cgid



Еще раз перезапускаем веб-сервер

systemctl restart apache2



На этом на PHP fastcgi на Apache настроен, PHP скрипты должны обрабатываться, убедиться можно обратившись через браузер к site.ru


PHP fastcgi


Читайте про выполнение CGI скриптов через Apache, по умолчанию CGI скрипты не выполняются, что обусловлено их низким уровнем безопасности и возможностью использования уязвимостей.

Сказать спасибо