Nginx/php-fpm: различия между версиями

Материал из ALT Linux Wiki
м (Elena Mishina переименовал страницу Nginx/php7-fpm в Nginx/php-fpm: php7-fpm → php8.0, php8.1, php 8.2)
Нет описания правки
 
(не показана 1 промежуточная версия 1 участника)
Строка 14: Строка 14:


Устанавливаем пакеты (добавив и акселератор), можно сразу запускать FPM:
Устанавливаем пакеты (добавив и акселератор), можно сразу запускать FPM:
<syntaxhighlight lang="bash"># apt-get install nginx php8.2-{fpm-fcgi,apcu}-fpm-fcgi php8.2-apcu
<syntaxhighlight lang="bash"># apt-get install nginx php8.2-{fpm-fcgi,apcu}
# systemctl enable --now php8.2-fpm</syntaxhighlight>
# systemctl enable --now php8.2-fpm</syntaxhighlight>


Строка 22: Строка 22:


Конфигурируем виртуальный хост — например, создаём файл {{path|/etc/nginx/sites-available.d/example.test.conf}}:
Конфигурируем виртуальный хост — например, создаём файл {{path|/etc/nginx/sites-available.d/example.test.conf}}:
<syntaxhighlight lang="ini">
<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 / {
                root /srv/www/example.test;
         }
         }


         location ~ \.php$ {
         location ~ [^/]\.php(/|$) {
                 root /srv/www/example.test;
                 fastcgi_split_path_info ^(.+?\.php)(/.*)$;
                 try_files $uri =404;
                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_pass unix:/var/run/php8.2-fpm/php8.2-fpm.sock;
 
                 fastcgi_param SCRIPT_FILENAME /srv/www/www.example.com/$fastcgi_script_name;
                 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                 fastcgi_param PATH_INFO $fastcgi_path_info;
         }
         }


Строка 48: Строка 58:


{{Note| В [[p9]] необходимо заменить строку:
{{Note| В [[p9]] необходимо заменить строку:
<syntaxhighlight lang="ini">fastcgi_pass unix:/var/run/php8.2-fpm/php8.2-fpm.sock;</syntaxhighlight>
<syntaxhighlight lang="nginx">fastcgi_pass unix:/var/run/php8.2-fpm/php8.2-fpm.sock;</syntaxhighlight>
на:
на:
<syntaxhighlight lang="ini">fastcgi_pass unix:/var/run/php7-fpm/php7-fpm.sock;</syntaxhighlight>}}
<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 - Подводные камни и распространённые ошибки]

Текущая версия от 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

Ссылки