Nginx/php-fpm

Материал из ALT Linux Wiki


Использование nginx и php8.x-fpm

Начиная с версии php8.0, пакеты модулей именуются следующим образом:

php<мажорная>.<минорная версии>-<имя модуля>

Из репозитория можно установить и эксплуатировать в одной системе одновременно разные версии php. В данной статье в качестве примера для p10 используется php8.2.

Установка

Примечание: При развёртывании в контейнере OpenVZ обратите внимание на shmpages, иначе FPM может не стартовать:
vzctl set 101 --shmpages 256M --save


Устанавливаем пакеты (добавив и акселератор), можно сразу запускать FPM:

# apt-get install nginx php8.2-{fpm-fcgi,apcu}
# systemctl enable --now php8.2-fpm
Примечание: Установка пакетов в p9:
# apt-get install nginx php7-fpm-fcgi php7-apcu
# systemctl enable --now php7-fpm


Конфигурируем виртуальный хост — например, создаём файл /etc/nginx/sites-available.d/example.test.conf:

server {
        listen *:80;
        server_name example.test www.example.test;
        root /srv/www/example.test;

        location / {
        }

        location ~ [^/]\.php(/|$) {
                fastcgi_split_path_info ^(.+?\.php)(/.*)$;
                if (!-f $document_root$fastcgi_script_name) {
                        return 404;
                }

                # Mitigate https://httpoxy.org/ vulnerabilities
                fastcgi_param HTTP_PROXY "";

                fastcgi_pass unix:/var/run/php8.2-fpm/php8.2-fpm.sock;
                fastcgi_index index.php;

                include /etc/nginx/fastcgi_params;

                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_path_info;
        }

        location ~ /\.ht {
                deny all;
        }

        access_log /var/log/nginx/example.test-access.log;
}
Примечание: В p9 необходимо заменить строку:
fastcgi_pass unix:/var/run/php8.2-fpm/php8.2-fpm.sock;

на:

fastcgi_pass unix:/var/run/php7-fpm/php7-fpm.sock;


Активировать конфигурацию:

# ln -s /etc/nginx/sites-available.d/example.test.conf /etc/nginx/sites-enabled.d/

Старт

Запускаем nginx:

# systemctl enable --now nginx

Проверка

Всё, можно проверять:

# mkdir -p /srv/www/example.test
# echo '<?php phpinfo(); ?>' >> /srv/www/example.test/secr3t.php


Для проверки работы веб-сервера в веб-браузере открыть страницу http://IP-сервера или http://домен (например, http://example.test/secr3t.php). Если всё работает, не забываем убрать крайне полезный для потенциального атакующего файл:

# rm -f /srv/www/example.test/secr3t.php

Ссылки