Вопрос или проблема
В настоящее время я столкнулся с проблемой разрешений в 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) корректно перезапущены после изменений. Если у вас останутся вопросы или проблемы, сообщите о них, и мы попытаемся помочь вам дальше.