Nginx/php-fpm: различия между версиями
м (Elena Mishina переименовал страницу Nginx/php7-fpm в Nginx/php-fpm: php7-fpm → php8.0, php8.1, php 8.2) |
Yyko (обсуждение | вклад) (поправлены конфиг nginx и язык в тэгах конфигов nginx, добавлены ссылки на вики nginx) |
||
Строка 22: | Строка 22: | ||
Конфигурируем виртуальный хост — например, создаём файл {{path|/etc/nginx/sites-available.d/example.test.conf}}: | Конфигурируем виртуальный хост — например, создаём файл {{path|/etc/nginx/sites-available.d/example.test.conf}}: | ||
<syntaxhighlight lang=" | <syntaxhighlight lang="nginx"> | ||
server { | server { | ||
listen *:80; | listen *:80; | ||
server_name example.test www.example.test; | server_name example.test www.example.test; | ||
root /srv/www/example.test; | |||
location / { | location / { | ||
} | } | ||
location ~ \.php$ { | 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; | include /etc/nginx/fastcgi_params; | ||
fastcgi_param SCRIPT_FILENAME /srv/www/www.example.com/$fastcgi_script_name; | fastcgi_param SCRIPT_FILENAME /srv/www/www.example.com/$fastcgi_script_name; | ||
fastcgi_param PATH_INFO $fastcgi_path_info; | |||
} | } | ||
Строка 48: | Строка 58: | ||
{{Note| В [[p9]] необходимо заменить строку: | {{Note| В [[p9]] необходимо заменить строку: | ||
<syntaxhighlight lang=" | <syntaxhighlight lang="nginx">fastcgi_pass unix:/var/run/php8.2-fpm/php8.2-fpm.sock;</syntaxhighlight> | ||
на: | на: | ||
<syntaxhighlight lang=" | <syntaxhighlight lang="nginx">fastcgi_pass unix:/var/run/php7-fpm/php7-fpm.sock;</syntaxhighlight>}} | ||
Активировать конфигурацию: | Активировать конфигурацию: | ||
Строка 70: | Строка 80: | ||
== Ссылки == | == Ссылки == | ||
* [[Nginx/fcgiwrap]] | * [[Nginx/fcgiwrap]] | ||
* [https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/ nginx wiki - Пример конфигурации PHP FastCGI] | |||
* [https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/ nginx wiki - Подводные камни и распространённые ошибки] |
Версия от 17:07, 17 декабря 2023
Использование 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