Nginx/php-fpm
Версия от 17:07, 17 декабря 2023; Yyko (обсуждение | вклад) (поправлены конфиг nginx и язык в тэгах конфигов nginx, добавлены ссылки на вики nginx)
Использование 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}-fpm-fcgi php8.2-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 /srv/www/www.example.com/$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