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

Материал из ALT Linux Wiki
Нет описания правки
Нет описания правки
 
(не показаны 3 промежуточные версии 2 участников)
Строка 1: Строка 1:
[[Категория:Web]]
[[Категория:Web]]


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


== Введение ==
Начиная с версии php8.0, пакеты модулей именуются следующим образом:
Помимо описанного [[Nginx/fcgiwrap|варианта с {{pkg|spawn-fcgi}}]], возможно применение в качестве стартера FastCGI-скриптов на PHP7 штатного {{pkg|php7-fpm}} — говорят, для развесистых инсталяций более гибок и удобен.
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:
apt-get install nginx php7-fpm-fcgi php7-apcu
<syntaxhighlight lang="bash"># apt-get install nginx php8.2-{fpm-fcgi,apcu}
chkconfig php7-fpm on
# systemctl enable --now php8.2-fpm</syntaxhighlight>
service php7-fpm start


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


         location / {
         location / {
                root /srv/www/www.example.com;
         }
         }


         location ~ \.php$ {
         location ~ [^/]\.php(/|$) {
                 root /srv/www/www.example.com;
                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/php7-fpm/php7-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;
         }
         }


Строка 38: Строка 53:
         }
         }


         access_log /var/log/nginx/www.example.com-access.log;
         access_log /var/log/nginx/example.test-access.log;
}
}
</pre>
</syntaxhighlight>
Делаем симлинк для подключения сделанной конфигурации:
ln -s ../sites-available.d/www.example.com.conf /etc/nginx/sites-enabled.d/


{{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>
== Старт ==
== Старт ==
Запускаем (или reload'им уже запущенный) nginx:
Запускаем nginx:
chkconfig nginx on
<syntaxhighlight lang="bash"># systemctl enable --now nginx</syntaxhighlight>
service nginx start


== Проверка ==
== Проверка ==
Всё, можно проверять:
Всё, можно проверять:
mkdir -p /srv/www/www.example.com
<syntaxhighlight lang="bash"># mkdir -p /srv/www/example.test
echo '<?php phpinfo(); ?>' >> /srv/www/www.example.com/secr3t.php
# echo '<?php phpinfo(); ?>' >> /srv/www/example.test/secr3t.php</syntaxhighlight>
 
И теперь идём по ссылке (разумеется, с исправленным доменом или подставленным IP): http://www.example.com/secr3t.php; если всё работает, не забываем убрать крайне полезный для потенциального атакующего файлик:
rm -f /srv/www/www.example.com/secr3t.php
Для проверки работы веб-сервера в веб-браузере открыть страницу 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

Ссылки