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
Читайте про выполнение CGI скриптов через Apache, по умолчанию CGI скрипты не выполняются, что обусловлено их низким уровнем безопасности и возможностью использования уязвимостей.