Версия PHP 7.4 содержит существенное количество обновлений и настоятельно рекомендуется к использованию. Для начала от имени суперпользователя добавляем репозитарий и обновляем списки пакетов:
$ apt-add-repository ppa:ondrej/php
$ apt-add-repository ppa:ondrej/nginx
$ apt update
Устанавливаем новые пакеты PHP и PHP-FPM:
$ apt install -y php7.4 php7.4-cli php7.4-common php7.4-fpm
Проверяем актуальную установленную версию PHP:
$ php -v
PHP 7.4.22 (cli) (built: Jul 30 2021 13:07:59) ( NTS )
(Опционально) Устанавливаем дополнительные библиотеки и модули для WordPress:
$ apt install -y php7.4-mysql php7.4-mysqli php7.4-dom php7.4-simplexml php7.4-ssh2 php7.4-xml php7.4-xmlreader php7.4-curl php7.4-exif php7.4-ftp php7.4-gd php7.4-iconv php7.4-imagick php7.4-json php7.4-mbstring php7.4-posix php7.4-sockets php7.4-tokenize php7.4-pdo php7.4-sqlite3 php7.4-ctype php7.4-fileinfo php7.4-zip php7.4-exif
(Опционально) Вносим изменения в /etc/php/7.4/fpm/php.ini — раскомментируем параметр cgi.fix_pathinfo и устанавливаем его равным 0.
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting
; of zero causes PHP to behave as before. Default is 1. You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=0
Перезапускаем сервис PHP-FPM:
$ systemctl restart php7.4-fpm.service
Проверяем, что появился новый сокет:
$ ls -1 /run/php/
php-fpm.sock
php7.2-fpm.pid
php7.2-fpm.sock
php7.4-fpm.pid
php7.4-fpm.sock
Теперь осталось только в конфиге NGINX поменять версию PHP-FPM (указываем новый сокет):
$ nano /etc/nginx/sites-available/default
...
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
...
Тестируем конфиг NGINX и перезапускаем его:
$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ systemctl reload nginx.service
Все шло хорошо до слов
nano /etc/nginx/sites-available/default
Такого пути у меня нет. ОС — Дебиан9
По дефолту nginx и в дебиане кладёт конфиги в /etc/nginx. Посмотрите, что есть в этой директории, возможно конфиг с default просто снесли и сделали отдельный под каждый сайт (в этом случае вместо default будет имя конфига для нужного сайта).
Ну и попробуйте поиском:
$ whereis nginx
$ find / -name sites-available