Доступ запрещён при подключении к сокету PHP-FPM

Вопрос или проблема

В настоящее время я столкнулся с проблемой разрешений в Nginx и PHP-FPM. При попытке получить доступ к моему проекту на Laravel в логах Nginx я получаю следующую ошибку:

Лог Nginx:

2024/10/05 22:09:56 [crit] 135537#135537: *3 connect() to unix:/run/php/php-fpm.sock failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/run/php/php-fpm.sock:", host: "telfoot.test"

/etc/php/8.3/fpm/php-fpm.conf:

;;;;;;;;;;;;;;;;;;;;;
; Конфигурация FPM ;
;;;;;;;;;;;;;;;;;;;;;

; Все относительные пути в этом конфигурационном файле относительно установки PHP
; префикс (/usr). Этот префикс может быть динамически изменен с помощью
; аргумента '-p' из командной строки.

;;;;;;;;;;;;;;;;;;
; Глобальные Опции ;
;;;;;;;;;;;;;;;;;;

[global]
; Файл pid
; Примечание: значение по умолчанию - /var
; Значение по умолчанию: нет
; Предупреждение: если вы измените значение здесь, вам нужно изменить
; настройку systemd PIDFile= так, чтобы она соответствовала значению здесь.
pid = /run/php/php8.3-fpm.pid

; Файл журнала ошибок
; Если он установлен в "syslog", журнал отправляется в syslogd, а не записывается
; в локальный файл.
; Примечание: значение по умолчанию - /var
; Значение по умолчанию: log/php-fpm.log
error_log = /var/log/php8.3-fpm.log

; syslog_facility используется для указания, какой тип программы ведет журнал
; сообщения. Это позволяет syslogd указать, что сообщения из разных служб
; будут обрабатываться по-разному.
; См. syslog(3) для возможных значений (например, daemon эквивалент LOG_DAEMON)
; Значение по умолчанию: daemon
;syslog.facility = daemon

; syslog_ident добавляется к каждому сообщению. Если у вас работает несколько FPM
; экземпляров на одном сервере, вы можете изменить значение по умолчанию,
; которое должно удовлетворять общим потребностям.
; Значение по умолчанию: php-fpm
;syslog.ident = php-fpm

; Уровень журнала
; Возможные значения: alert, error, warning, notice, debug
; Значение по умолчанию: notice
;log_level = notice

; Ограничение на количество символов в одной строке (запись в журнале). Если строка
; превышает лимит, она разбивается на несколько строк. Ограничение касается
; всех записанных символов, включая префикс и суффикс сообщения, если они есть. Однако
; символ новой строки не учитывается, так как он присутствует только при
; записи в файловый дескриптор. Это означает, что символ новой строки не присутствует
; при записи в syslog.
; Значение по умолчанию: 1024
;log_limit = 4096

; Буферизация журнала указывает, если строка журнала буферизуется, что означает, что
; строка записывается за одну операцию записи. Если значение ложное, то данные
; записываются непосредственно в файловый дескриптор. Это экспериментальный
; параметр, который может потенциально улучшить производительность ведения журнала и использование памяти
; для некоторых тяжелых сценариев ведения журнала. Этот параметр игнорируется при записи в syslog,
; поскольку он всегда должен быть буферизован.
; Значение по умолчанию: yes
;log_buffering = no

; Если это количество дочерних процессов завершится с SIGSEGV или SIGBUS в течение
; времени, установленного emergency_restart_interval, тогда FPM перезапустится. Значение
; '0' означает 'выключено'.
; Значение по умолчанию: 0
;emergency_restart_threshold = 0

; Интервал времени, используемый emergency_restart_interval для определения,
; когда будет инициирован корректный перезапуск. Это может быть полезным для обхода
; случайных повреждений в общей памяти ускорителя.
; Доступные единицы: s(екунды), m(интимы), h(оры), или d(ни).
; Значение по умолчанию: 0
;emergency_restart_interval = 0

; Временной лимит для дочерних процессов ожидания реакции на сигналы от мастера.
; Доступные единицы: s(екунды), m(интимы), h(оры), или d(ни).
; Значение по умолчанию: 0
;process_control_timeout = 0

; Максимальное количество процессов, которые FPM создаст. Это было задумано для управления
; общим количеством процессов при использовании динамического PM в большом количестве пулов.
; Используйте его с осторожностью.
; Примечание: Значение 0 указывает на отсутствие лимита
; Значение по умолчанию: 0
; process.max = 128

; Укажите приоритет nice(2), который будет применен к процессу мастера (только если установлен)
; Значение может варьироваться от -19 (высший приоритет) до 20 (низший приоритет)
; Примечание: - Он будет работать только если процесс мастера FPM запущен от имени root
;       - Процесс пула унаследует приоритет процесса мастера
;         если не указано иное
; Значение по умолчанию: не установлено
; process.priority = -19

; Отправить FPM в фон. Установите 'no', чтобы оставить FPM на переднем плане для отладки.
; Значение по умолчанию: yes
;daemonize = yes

; Установите ограничение rlimit для открытых файловых дескрипторов для процесса мастера.
; Значение по умолчанию: значение, определяемое системой
;rlimit_files = 1024

; Установите максимальный размер core rlimit для процесса мастера.
; Возможные значения: 'неограниченно' или целое число большее или равное 0
; Значение по умолчанию: значение, определяемое системой
;rlimit_core = 0

; Укажите механизм событий, который будет использовать FPM. Доступные возможности:
; - select     (любой POSIX os)
; - poll       (любой POSIX os)
; - epoll      (linux >= 2.5.44)
; - kqueue     (FreeBSD >= 4.1, OpenBSD >= 2.9, NetBSD >= 2.0)
; - /dev/poll  (Solaris >= 7)
; - port       (Solaris >= 10)
; Значение по умолчанию: не установлено (автоопределение)
;events.mechanism = epoll

; Когда FPM собирается с интеграцией systemd, укажите интервал,
; в секундах, между уведомлениями о состоянии здоровья для systemd.
; Установите 0, чтобы отключить.
; Доступные единицы: s(екунды), m(интимы), h(оры)
; Значение по умолчанию: 10
;systemd_interval = 10

;;;;;;;;;;;;;;;;;;;;
; Определения пула ;
;;;;;;;;;;;;;;;;;;;;

; Несколько пулов дочерних процессов могут быть запущены с разными портами для прослушивания
; и различными параметрами управления. Имя пула будет
; использоваться в журналах и статистике. Нет ограничений на количество пулов, которые
; может обрабатывать FPM. Ваша система все равно это подсчитает :)

; Включите один или несколько файлов. Если glob(3) существует, он используется для включения группы
; файлов по шаблону glob(3). Эта директива может быть использована везде в файле.
; Также можно использовать относительный путь. Они будут предварены:
;  - глобальным префиксом, если он установлен (аргумент -p)
;  - /usr в противном случае
include=/etc/php/8.3/fpm/pool.d/*.conf

nginx -T:

2024/10/05 22:29:28 [warn] 140362#140362: "ssl_stapling" игнорируется, сертификат удостоверяющего центра не найден для сертификата "/etc/ssl/certs/nginx-selfsigned.crt"
2024/10/05 22:29:28 [warn] 140362#140362: "ssl_stapling" игнорируется, сертификат удостоверяющего центра не найден для сертификата "/etc/ssl/certs/nginx-selfsigned.crt"
nginx: файл конфигурации /etc/nginx/nginx.conf синтаксически корректен
nginx: тест конфигурационного файла /etc/nginx/nginx.conf успешен
# файл конфигурации /etc/nginx/nginx.conf:
worker_processes auto;
pid /run/nginx.pid;
error_log /var/log/nginx/error.log;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Основные настройки
        ##

        sendfile on;
        tcp_nopush on;
        types_hash_max_size 2048;
        # server_tokens off;

        server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # SSL-настройки
        ##

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Отключение SSLv3, ссылка: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Настройки ведения журнала
        ##

        access_log /var/log/nginx/access.log;

        ##
        # Настройки Gzip
        ##

        gzip on;

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

        ##
        # Конфигурации виртуального хоста
        ##

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}


#mail {
#       # См. пример скрипта аутентификации на:
#       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#       # auth_http localhost/auth.php;
#       # pop3_capabilities "TOP" "USER";
#       # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#       server {
#               listen     localhost:110;
#               protocol   pop3;
#               proxy      on;
#       }
#
#       server {
#               listen     localhost:143;
#               protocol   imap;
#               proxy      on;
#       }
#}

# файл конфигурации /etc/nginx/mime.types:

types {
    text/html                                        html htm shtml;
    text/css                                         css;
    text/xml                                         xml;
    image/gif                                        gif;
    image/jpeg                                       jpeg jpg;
    application/javascript                           js;
    application/atom+xml                             atom;
    application/rss+xml                              rss;

    text/mathml                                      mml;
    text/plain                                       txt;
    text/vnd.sun.j2me.app-descriptor                 jad;
    text/vnd.wap.wml                                 wml;
    text/x-component                                 htc;

    image/avif                                       avif;
    image/png                                        png;
    image/svg+xml                                    svg svgz;
    image/tiff                                       tif tiff;
    image/vnd.wap.wbmp                               wbmp;
    image/webp                                       webp;
    image/x-icon                                     ico;
    image/x-jng                                      jng;
    image/x-ms-bmp                                   bmp;

    font/woff                                        woff;
    font/woff2                                       woff2;

    application/java-archive                         jar war ear;
    application/json                                 json;
    application/mac-binhex40                         hqx;
    application/msword                               doc;
    application/pdf                                  pdf;
    application/postscript                           ps eps ai;
    application/rtf                                  rtf;
    application/vnd.apple.mpegurl                    m3u8;
    application/vnd.google-earth.kml+xml             kml;
    application/vnd.google-earth.kmz                 kmz;
    application/vnd.ms-excel                         xls;
    application/vnd.ms-fontobject                    eot;
    application/vnd.ms-powerpoint                    ppt;
    application/vnd.oasis.opendocument.graphics      odg;
    application/vnd.oasis.opendocument.presentation  odp;
    application/vnd.oasis.opendocument.spreadsheet   ods;
    application/vnd.oasis.opendocument.text          odt;
    application/vnd.openxmlformats-officedocument.presentationml.presentation
                                                     pptx;
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
                                                     xlsx;
    application/vnd.openxmlformats-officedocument.wordprocessingml.document
                                                     docx;
    application/vnd.wap.wmlc                         wmlc;
    application/wasm                                 wasm;
    application/x-7z-compressed                      7z;
    application/x-cocoa                              cco;
    application/x-java-archive-diff                  jardiff;
    application/x-java-jnlp-file                     jnlp;
    application/x-makeself                           run;
    application/x-perl                               pl pm;
    application/x-pilot                              prc pdb;
    application/x-rar-compressed                     rar;
    application/x-redhat-package-manager             rpm;
    application/x-sea                                sea;
    application/x-shockwave-flash                    swf;
    application/x-stuffit                            sit;
    application/x-tcl                                tcl tk;
    application/x-x509-ca-cert                       der pem crt;
    application/x-xpinstall                          xpi;
    application/xhtml+xml                            xhtml;
    application/xspf+xml                             xspf;
    application/zip                                  zip;

    application/octet-stream                         bin exe dll;
    application/octet-stream                         deb;
    application/octet-stream                         dmg;
    application/octet-stream                         iso img;
    application/octet-stream                         msi msp msm;

    audio/midi                                       mid midi kar;
    audio/mpeg                                       mp3;
    audio/ogg                                        ogg;
    audio/x-m4a                                      m4a;
    audio/x-realaudio                                ra;

    video/3gpp                                       3gpp 3gp;
    video/mp2t                                       ts;
    video/mp4                                        mp4;
    video/mpeg                                       mpeg mpg;
    video/ogg                                        ogv;
    video/quicktime                                  mov;
    video/webm                                       webm;
    video/x-flv                                      flv;
    video/x-m4v                                      m4v;
    video/x-matroska                                 mkv;
    video/x-mng                                      mng;
    video/x-ms-asf                                   asx asf;
    video/x-ms-wmv                                   wmv;
    video/x-msvideo                                  avi;
}

# файл конфигурации /etc/nginx/sites-enabled/default:
##
# Вам следует ознакомиться со следующими URL, чтобы получить твердое понимание
# конфигурационных файлов Nginx, чтобы полностью раскрыть возможности Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# В большинстве случаев администраторы удаляют этот файл из sites-enabled/ и
# оставляют его в качестве справки внутри sites-available, где он продолжит обновляться
# командой упаковки nginx.
#
# Этот файл автоматически загрузит конфигурационные файлы, предоставленные другими
# приложениями, такими как Drupal или WordPress. Эти приложения будут доступны
# под путем с именем этого пакета, таким как /drupal8.
#
# Пожалуйста, смотрите /usr/share/doc/nginx-doc/examples/ для более подробных примеров.
##

# Конфигурация сервера по умолчанию
#
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        # SSL конфигурация
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Примечание: Вы должны отключить gzip для SSL-трафика.
        # Смотрите: https://bugs.debian.org/773332
        #
        # Ознакомьтесь с ssl_ciphers, чтобы обеспечить безопасную конфигурацию.
        # Смотрите: https://bugs.debian.org/765782
        #
        # Самоподписанные сертификаты, созданные пакетом ssl-cert
        # Не используйте их на сервере в производственной среде!
        #
        # include snippets/snakeoil.conf;

        root /var/www/html;

        # Добавьте index.php в список, если вы используете PHP
        index index.html index.htm index.nginx-debian.html index.php;

        server_name _;

        location / {
                # Первая попытка обслужить запрос как файл, затем
                # как каталог, затем по умолчанию отображается 404.
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php/php-fpm.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
    }

        # передать PHP скрипты FastCGI серверу
        #
        # location ~ \.php$ {
        #       include snippets/fastcgi-php.conf;

        #       # С php-fpm (или другими unix сокетами):
        #       fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        #       # С php-cgi (или другими tcp сокетами):
        #       fastcgi_pass 127.0.0.1:9000;
        # }

        # запретить доступ к .htaccess файлам, если корень документов Apache
        # совпадает с корнем документов nginx
        #
        #location ~ /\.ht {
        #       deny all;
        #}
}


# Конфигурация виртуального хоста для example.com
#
# Вы можете переместить это в другой файл в sites-available/ и создать символическую ссылку
# на sites-enabled/, чтобы включить его.
#
#server {
#       listen 80;
#       listen [::]:80;
#
#       server_name example.com;
#
#       root /var/www/example.com;
#       index index.html;
#
#       location / {
#               try_files $uri $uri/ =404;
#       }
#}

# файл конфигурации /etc/nginx/fastcgi.conf:

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  REMOTE_USER        $remote_user;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# Только для PHP, необходимо, если PHP был собран с --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

# файл конфигурации /etc/nginx/sites-enabled/football-bot:
server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name telfoot.test;
    root /home/amyr/code/football-bot/public;

    include snippets/self-signed.conf;
    include snippets/ssl-params.conf;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php index.nginx-debian.html;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico {
        access_log off; log_not_found off;
    }
    location = /robots.txt {
        access_log off; log_not_found off;
    }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}
# файл конфигурации /etc/nginx/snippets/self-signed.conf:
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;

# файл конфигурации /etc/nginx/snippets/ssl-params.conf:
ssl_protocols TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/dhparam.pem; 
ssl_ciphers EECDH+AESGCM:EDH+AESGCM;
ssl_ecdh_curve secp384r1;
ssl_session_timeout  10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# Временно отключите строгую безопасность транспорта. Вы можете раскомментировать следующую
# строку, если понимаете все последствия.
#add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";

# файл конфигурации /etc/nginx/fastcgi_params:

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  REMOTE_USER        $remote_user;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# Только для PHP, необходимо, если PHP был собран с --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

# файл конфигурации /etc/nginx/sites-enabled/telegrambot:
server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name telegrambot.test www.telegrambot.test;

    include snippets/self-signed.conf;
    include snippets/ssl-params.conf;

    root /var/www/telegrambot/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php index.nginx-debian.html;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico {
        access_log off; log_not_found off;
    }
    location = /robots.txt {
        access_log off; log_not_found off;
    }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}
# файл конфигурации /etc/nginx/sites-enabled/tutorial:
server {
       listen 81;
       listen [::]:81;

       server_name example.ubuntu.com;

       root /var/www/tutorial;
       index index.html;

       location / {
               try_files $uri $uri/ =404;
       }
}

Моя конфигурация:

ОС: Ubuntu 24.04 LTS
Веб-сервер: Nginx 1.24.0
Версия PHP: PHP 8.3 (используя PHP-FPM)
Версия Laravel: 11.2

Ответ или решение

Когда вы сталкиваетесь с ошибкой "Permission Denied" при подключении к сокету PHP-FPM в Nginx, это обычно связано с проблемами прав доступа. Вот пошаговое руководство для устранения этой проблемы:

1. Проверьте права на сокет

Проблема может быть в правами доступа к сокету PHP-FPM, который используется для передачи запросов от Nginx к PHP. По умолчанию сокет находится по пути /run/php/php8.3-fpm.sock. Вам необходимо убедиться, что пользователь, под которым работает Nginx (обычно это www-data), имеет доступ к этому сокету.

Выполните команду, чтобы проверить права на сокет:

ls -l /run/php/php8.3-fpm.sock

Вывод команды будет похож на следующий:

srw-rw---- 1 www-data www-data 0 Oct  5 22:09 /run/php/php8.3-fpm.sock

Если пользователь не совпадает с www-data (или если разрешения недостаточны), исправьте это следующим образом:

2. Настройте пул PHP-FPM

Откройте конфигурацию пула PHP-FPM, которая обычно находится по пути /etc/php/8.3/fpm/pool.d/www.conf (имя файла может немного отличаться, или может быть несколько пулов). Найдите строки, связанные с listen.mode, user и group:

listen = /run/php/php8.3-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

Это позволит Nginx (пользователь www-data) получить доступ к сокету. Возможно, вам также понадобится настроить соответствующие user и group, чтобы они совпадали с теми, что используются в Nginx.

3. Перезапустите PHP-FPM

После внесения изменений в конфигурацию пула PHP-FPM не забудьте перезапустить сервис, чтобы применить новые настройки:

sudo systemctl restart php8.3-fpm

4. Проверьте конфигурацию Nginx

Проверьте конфигурацию сайта в Nginx, чтобы убедиться, что она корректно настроена. Например, убедитесь, что конфигурация, использующая сокет, выглядит правильно:

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

5. Проверьте журналы

Если проблема все еще сохраняется, проверьте журналы ошибок Nginx и PHP-FPM для получения дополнительной информации о том, что может быть не так:

  • Журнал ошибок Nginx: /var/log/nginx/error.log
  • Журнал ошибок PHP-FPM: /var/log/php8.3-fpm.log

6. Проверка SELinux/AppArmor

Если у вас включен SELinux или AppArmor, они также могут блокировать доступ. Проверьте их журналы и настройки. Возможно, вам придется добавить правила или отключить их для устранения проблемы.

7. Пример команд

Вот пример команды, чтобы задать права доступа к сокету, если они неправильно настроены:

sudo chown www-data:www-data /run/php/php8.3-fpm.sock
sudo chmod 660 /run/php/php8.3-fpm.sock

Заключение

Следуя этим шагам, вы сможете устранить проблему "Permission Denied" при подключении к сокету PHP-FPM. Убедитесь, что права доступа настроены правильно, и что обе службы (Nginx и PHP-FPM) корректно перезапущены после изменений. Если у вас останутся вопросы или проблемы, сообщите о них, и мы попытаемся помочь вам дальше.

Оцените материал
Добавить комментарий

Капча загружается...