Debian 9 + PHP в режиме fastcgi

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

Настройку будем производить на сервере с операционной системой Debian 9. Из репозитория для нее ставится 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

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

Все активные модули можно посмотреть в каталоге 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

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

 

Debian fastcgi

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