Как установить Php-Fpm в Linux

PHP-FPM - это разновидность SAPI для PHP. Чтобы понять, что это такое, стоит рассказать о понятии SAPI. 

SAPI, он же Server API. В php есть несколько таких API для разных вариантов его работы:

  • CLI SAPI - в качестве консольной команды `php` для запуска наших кронов и других cli-программ (Command Line Interface)
  • apxs2 SAPI - в качестве модуля к apache2
  • CGI SAPI - в качестве запускаемого на каждом запросе CGI (сейчас так почти никто не делает)
  • FPM SAPI - Fast Process Manager, написанный для PHP разработчиками из комании Badoo и теперь поддерживаемый сообществом

Работа с FPM отличается от работы с Apache в первую очередь тем, что FPM - это только PHP. Это не веб-сервер, не что-то умное. Это наоборот - максимально простой, легкий и быстрый менеджер процессов для PHP. В отличие от апача, он даже не использует http-протокол, а работает со специальным fastcgi-протоколом. В первую очередь FPM быстрее обрабатывает запросы благодаря его легковесности и простоте.

Во вторую очередь, FPM действительно умный менеджер процессов. Он контролирует количество работающих PHP-процессов, частоту их перезапуска для борьбы с утечками памяти (да, модули php как и всегда текут) и прочие простые вещи, необходимые для контроля сервера.

Нужно помнить, что независимо от того, какое SAPI вы используете, будь то модуль Apache, CGI или PHP-FPM - это не отнимает ни каких особенностей php. А первая его особенность:

  • Один процесс одновременно обрабатывает один запрос. Это абсолютно так же свойственно для PHP-FPM, как и для Apache.
  • Количество процессов определяет, сколько одновременно может "висеть" запросов в обработке.
  • Точно также, как и Apache, FPM подвержен DoS-атакам путем "длительных запросов". Допустим, у Вас на сервере работает не более 50-ти процессов PHP-FPM, а это значит, что если 50 пользователей одновременно начнут делать upload файла (пусть даже небольшого, но главное, чтобы они делали это медленно) - пятьдесят первый пользователь получит ошибку 504, т.к. FPM не возьмет его запрос на обработку, пока не разберется с теми, что у него уже есть.
Как установить PHP-FPM в Ubuntu и Debian

Nginx использует PHP-FPM, и для удобства мы используем PPA Ондрея Сьюри, поэтому мы можем установить несколько версий PHP.

        $ sudo apt install libapache2-mod-fcgid
        $ sudo apt install software-properties-common
        $ sudo add-apt-repository ppa:ondrej/php && sudo apt update
        $ sudo apt install -y php7.4 php7.4-fpm php7.4-curl php7.4-gd php7.4-json php7.4-mbstring php7.4-mysql php7.4-opcache php7.4-xml php7.4-xmlrpc php7.4-fileinfo php7.4-imagick php-pear
        $ sudo service php7.4-fpm start

Проверьте, работает ли PHP с помощью Netstat:

$ netstat -pl | grep php

Все в порядке, если результат будет похож на текст ниже:

        (Not all processes could be identified, non-owned process info
        will not be shown, you would have to be root to see it all.)
        unix  2      [ ACC ]     STREAM     LISTENING     30323    -                    /run/php/php7.4-fpm.sock
ПредметИнформатика СложностьПростая
Как настроить Nginx и PHP-FPM в Ubuntu и Debian
Задача
Как настроить Nginx и PHP-FPM в Ubuntu и Debian
Ответ

Откройте файл конфигурации

$ vi /etc/nginx/nginx.conf

Раскомментируйте следующие строки.

keepalive_timeout 2;
server_tokens off;

Сохраните файл конфигурации.

$ vi sites-available/default

Добавьте или измените эту строку:

location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }

Сохраните его и выйдите. Протестируйте конфигурацию nginx и убедитесь, что нет ошибок

$ sudo nginx -t

затем перезапустите службу

$ sudo systemctl reload nginx
ПредметWeb Server
Читать по теме
Интересные статьи