20.01.2020 08:50

Настройка Apache для поддержки PHP-FPM на Debian/Ubuntu (apache2 + php-fpm)

В этой статье я объясню, как настроить Apache сервер для поддержки PHP-FPM на операционной системе Debian/Ubuntu. PHP-FPM — это менеджер процессов FastCGI (FCGI) в PHP, обычно используемый для высоконагруженных сайтов. Этот метод интеграции PHP использует Nginx. Но мы также можем использовать FastCGI в Apache для повышения производительности. PHP-FPM 7.4 является последней стабильной версией, доступной для установки. По этой инструкции вы также можете установить PHP-FPM 7.3, PHP-FPM 7.2, PHP-FPM 7.1, PHP-FPM 7.0.

Эта инструкция была выполнена на операционных системах: Debian 10, Debian 9, Ubuntu 20.10, Ubuntu 20.04, Ubuntu 19.10.

Установка PHP-FPM

Перед любой установкой программного обеспечения рекомендуется обновить список пакетов репозитория, выполнив команду в терминале:

sudo apt-get update

Установим PHP-FPM, выполнив команду в терминале:

sudo apt-get install php7.4-fpm

или

sudo apt-get install php-fpm

Вы можете узнать больше о том, как установить PHP 7.x в Debian и как установить PHP 7.x в Ubuntu.

Установка PHP-FPM

Настройка Apache для поддержки PHP-FPM

Перед тем как настроить Apache для работы с обработчиком PHP узнаем его версию, выполнив команду в терминале:

php -v

Файл конфигурации Apache /etc/apache2/conf-available/php7.4-fpm.conf должен быть создан после установки PHP-FPM. Вы также можете создать этот файл вручную, выполнив команду в терминале:

sudo nano /etc/apache2/conf-available/php7.4-fpm.conf
# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>
    # Enable http authorization headers
    <IfModule setenvif_module>
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
    </IfModule>

    <FilesMatch ".+\.ph(ar|p|tml)$">
        SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost" # PHP version (php -v command)
    </FilesMatch>
    <FilesMatch ".+\.phps$">
        # Deny access to raw php sources by default
        # To re-enable it's recommended to enable access to the files
        # only in specific virtual host or directory
        Require all denied
    </FilesMatch>
    # Deny access to files without filename (e.g. '.php')
    <FilesMatch "^\.ph(ar|p|ps|tml)$">
        Require all denied
    </FilesMatch>
</IfModule>
</IfModule>

Сохраняем изменения и закрываем файл.

Вы должны активировать модуль proxy_fcgi, выполнив команду в терминале:

sudo a2enmod proxy_fcgi

Не забудьте активировать файл конфигурации, выполнив команду в терминале:

sudo a2enconf php7.4-fpm

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

sudo a2dismod php7.4

Проверим конфигурацию на валидность, выполнив команду в терминале:

sudo apache2 -t

Теперь применим изменения конфигурации, выполнив команду в терминале:

sudo service apache2 reload

Тестирование Apache с поддержкой PHP-FPM

Давайте проверим, что Apache корректно передает файлы с расширением .php нашему обработчику PHP. Создадим тестовый файл, который будет возвращать информацию о нашем сервере, выполнив команду в терминале:

echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

Давайте убедимся, что Apache сервер корректно отображает содержимое, сгенерированное PHP скриптом, открыв данную страницу в браузере:

http://192.168.0.101/info.php

или для локального хоста

http://localhost/info.php

Если вы правильно настроили Apache для поддержки PHP-FPM, то отобразится похожая страница:

Testing Apache with PHP-FPM support

После проверки в целях безопасности вам необходимо удалить этот файл, выполнив команду в терминале:

sudo rm /var/www/html/info.php

Другие статьи