Приведу пример установки PHP c FastCGI вручную из библиотек на CentOS 7 или PHP 7.4.12. Можно использовать установку как для Apache, так и для Nginx, но последующая конфигурация будет различаться.
Смотрим доступную версию на https://www.php.net/releases/
cd /opt
wget https://www.php.net/distributions/php-7.4.12.tar.gz
tar xvf php-7.4.12.tar.gz
cd php-7.4.12
/opt/php74
yum install gcc make libxml2-devel openssl-devel curl-devel curl libjpeg-devel libpng-devel freetype-devel libmcrypt-devel \
postgresql-devel
./configure \
--prefix=/opt/php74 \
--with-config-file-path=/opt/php74 \
--with-pdo-pgsql \
--with-zlib-dir \
--with-freetype-dir \
--enable-mbstring \
--with-libxml-dir=/usr \
--enable-soap \
--enable-calendar \
--with-curl=/usr/bin \
--with-mcrypt \
--with-zlib \
--with-gd \
--with-pgsql \
--disable-rpath \
--enable-inline-optimization \
--with-bz2 \
--with-zlib \
--enable-sockets \
--enable-sysvsem \
--enable-sysvshm \
--enable-pcntl \
--enable-mbregex \
--with-mhash \
--enable-zip \
--with-pcre-regex \
--with-mysql \
--with-pdo-mysql \
--with-mysqli \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--enable-gd-native-ttf \
--with-openssl \
--with-libdir=lib64 \
--enable-ftp \
--with-kerberos \
--with-gettext \
--enable-cli \
--enable-fastcgi \
--enable-discard-path \
--enable-force-cgi-redirect \
--enable-cgi
make
make install
--enable-cgi, используйте
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--enable-fpm
--with-fpm-user=apache
и --with-fpm-group=apache
. Если вы хотите использовать эту версию PHP-FPM с nginx, --with-fpm-user=nginx
и --with-fpm-group=nginx
.make install
не будет создавать INI-файл. Скопируйте php.ini и php-fpm.conf в правильный каталог из папки /opt, куда вы скачали исходники.yum install mod_fcgid
Создание обертки FastCGI
vi /usr/lib/cgi-bin/php74-cgi
#!/bin/sh
PHPRC="/opt/php74/"
export PHPRC
PHP_FCGI_CHILDREN=4
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_MAX_REQUESTS
exec /opt/php74/bin/php-cgi
chmod +x /usr/lib/cgi-bin/php74-cgi
Создадим конфигурационный файл для apache с настройками обработчика PHP скриптов, нужно сказать серверу, что скрипты должны обрабатываться CGI-приложением:
vi /etc/apache2/php74.conf
Добавим обработчик:
<FilesMatch "\.php">
SetHandler application/x-httpd-php7
</FilesMatch>
ScriptAlias /php74-cgi /usr/lib/cgi-bin/php74-cgi
Action application/x-httpd-php7 /php74-cgi
AddHandler application/x-httpd-php7 .php
В настройках виртуального хоста осталось добавить импорт php74.conf файла и для этого хоста будет работать PHP 7.4 через FCGI.
<VirtualHost *.80>
...
Include php74.conf
...
</VirtualHost>
Настройка PHP-FPM
FPM модуль PHP мы установили ранее. Для Nginx он устанавливается командой:
yum install php-fpm
а для Apache:
yum install mod_fcgid
Модули должны быть включены в конфигурации Apache (httpd.conf) и nginx (nginx.conf) соответственно.
Настройка пользователя и порта сокета выполняется с файле /opt/php74/etc/php-fpm.conf. По умолчанию используется порт 9000, то можете указать другой, если 9000 занят.
pid = run/php-fpm.pid
...
user = nginx
group = nginx
...
listen = 127.0.0.1:9001
Далее осталось настроить виртуальный сервер, чтобы он проксировал запросы к php скриптам в FPM.
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9001;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}