Nginx/php-fpm: различия между версиями
м (права на сокет) |
Нет описания правки |
||
(не показано 6 промежуточных версий 3 участников) | |||
Строка 1: | Строка 1: | ||
[[Категория:Web]] | [[Категория:Web]] | ||
= Использование nginx и | == Использование nginx и php8.x-fpm == | ||
Начиная с версии php8.0, пакеты модулей именуются следующим образом: | |||
php<мажорная>.<минорная версии>-<имя модуля> | |||
Из репозитория можно установить и эксплуатировать в одной системе одновременно разные версии php. В данной статье в качестве примера для [[p10]] используется php8.2. | |||
== Установка == | == Установка == | ||
При развёртывании в контейнере [[OpenVZ]] обратите внимание на shmpages, иначе FPM может не стартовать: | {{Note|При развёртывании в контейнере [[OpenVZ]] обратите внимание на shmpages, иначе FPM может не стартовать: | ||
vzctl set 101 --shmpages 256M --save | vzctl set 101 --shmpages 256M --save | ||
}} | |||
Устанавливаем пакеты (добавив и акселератор), можно сразу запускать FPM: | Устанавливаем пакеты (добавив и акселератор), можно сразу запускать FPM: | ||
<syntaxhighlight lang="bash"># apt-get install nginx php8.2-{fpm-fcgi,apcu} | |||
# systemctl enable --now php8.2-fpm</syntaxhighlight> | |||
{{Note|Установка пакетов в [[p9]]: | |||
<syntaxhighlight lang="bash"># apt-get install nginx php7-fpm-fcgi php7-apcu | |||
# systemctl enable --now php7-fpm</syntaxhighlight>}} | |||
Конфигурируем виртуальный хост — например, создаём файл {{path|/etc/nginx/sites-available.d/ | Конфигурируем виртуальный хост — например, создаём файл {{path|/etc/nginx/sites-available.d/example.test.conf}}: | ||
< | <syntaxhighlight lang="nginx"> | ||
server { | server { | ||
listen *:80; | listen *:80; | ||
server_name example. | 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 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | ||
fastcgi_param PATH_INFO $fastcgi_path_info; | |||
} | } | ||
Строка 39: | Строка 53: | ||
} | } | ||
access_log /var/log/nginx/ | access_log /var/log/nginx/example.test-access.log; | ||
} | } | ||
</ | </syntaxhighlight> | ||
{{Note| В [[p9]] необходимо заменить строку: | |||
<syntaxhighlight lang="nginx">fastcgi_pass unix:/var/run/php8.2-fpm/php8.2-fpm.sock;</syntaxhighlight> | |||
на: | |||
<syntaxhighlight lang="nginx">fastcgi_pass unix:/var/run/php7-fpm/php7-fpm.sock;</syntaxhighlight>}} | |||
Активировать конфигурацию: | |||
<syntaxhighlight lang="bash"># ln -s /etc/nginx/sites-available.d/example.test.conf /etc/nginx/sites-enabled.d/</syntaxhighlight> | |||
== Старт == | == Старт == | ||
Запускаем | Запускаем nginx: | ||
<syntaxhighlight lang="bash"># systemctl enable --now nginx</syntaxhighlight> | |||
== Проверка == | == Проверка == | ||
Всё, можно проверять: | Всё, можно проверять: | ||
<syntaxhighlight lang="bash"># mkdir -p /srv/www/example.test | |||
# echo '<?php phpinfo(); ?>' >> /srv/www/example.test/secr3t.php</syntaxhighlight> | |||
Для проверки работы веб-сервера в веб-браузере открыть страницу http://IP-сервера или http://домен (например, http://example.test/secr3t.php). Если всё работает, не забываем убрать крайне полезный для потенциального атакующего файл: | |||
<syntaxhighlight lang="bash"># rm -f /srv/www/example.test/secr3t.php</syntaxhighlight> | |||
== Ссылки == | == Ссылки == | ||
* [[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 - Подводные камни и распространённые ошибки] |
Текущая версия от 16:31, 2 февраля 2024
Использование 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