Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Причины ошибки и способы решения - connect() to unix:/run/php-fpm/www.sock failed (Resource temporarily unavailable) while connecting to upstream)

Лекция



Ошибка "connect() to unix:/run/php-fpm/www.sock failed (11: Resource temporarily unavailable) while connecting to upstream" возникает, когда Nginx не может установить соединение с PHP-FPM через Unix domain socket. Это может быть вызвано несколькими причинами. Вот некоторые из них и способы решения проблемы:

1. PHP-FPM не запущен: Проверьте, что процесс PHP-FPM работает и слушает на правильном Unix domain socket. Вы можете выполнить команду для проверки состояния PHP-FPM:

#bash
sudo systemctl status php-fpm
Если PHP-FPM не запущен, используйте команду для его запуска:
#bash 
sudo systemctl start php-fpm

2. Неправильный путь к Unix domain socket: Убедитесь, что путь к Unix domain socket, указанный в настройках PHP-FPM, совпадает с тем, который использует Nginx для соединения. Проверьте настройки PHP-FPM в файле конфигурации /etc/php/{версия PHP}/fpm/pool.d/www.conf и убедитесь, что параметр listen указывает на правильный путь к socket.

3. Ошибки разрешения прав доступа: Проверьте права доступа к Unix domain socket. Обычно PHP-FPM работает с правами пользователя www-data (или другого пользователя www-data), а Nginx работает также от имени этого же пользователя. Убедитесь, что оба процесса имеют доступ к Unix domain socket.

4. Недостаток ресурсов: Ошибка "Resource temporarily unavailable" может быть вызвана недостатком ресурсов, таких как файловые дескрипторы или процессы. Убедитесь, что система не достигла лимита на количество открытых файлов или процессов. Вы можете проверить текущие значения лимитов с помощью команды ulimit -a.

Значение по умолчанию 128 = соединения через каждый файловый сокет. Во время теста высокой нагрузки или производительности в журнале Nginx появится такая проблема:

*1 connect() to
unix:/run/php/php8.0-fpm.sock failed (11: Resource temporarily unavailable)

Убедитесь, что ограничения операционной системы позволяют использовать указанное выше значение.

Запустите:

sysctl net.core.somaxconn

Если отображает значение 128, попробуйте ег увеличить.

Причины ошибки и способы  решения - connect() to unix:runphp-fpmwww.sock failed (Resource temporarily unavailable) while connecting to upstream)

Меняем лимиты — в файле /etc/sysctl.conf меняем или добавляем эти строки:

net.core.somaxconn = 5000
net.core.netdev_max_backlog = 65535

Применяем параметры

$ sudo sysctl -p

и перезапускаем сервер.

Если перезагрузить нельзя, то перезапускаем php-fpm:

$ sudo service php8.0-fpm restart

и web-сервер nginx:

$ sudo service nginx restart

Это может быть следствием DoS/DDoS атаки

Как вариант можно на разные домены поставить разные хосты (домены) разные сокеты разных пхп.

или увеличить количество соединений на один сокет. или добавить защиту от Дос атак.

читайте подробнее ниже о сособах борьбы с этим злом.

5. Конфликт портов: Если у вас используется TCP-порт вместо Unix domain socket для связи Nginx с PHP-FPM, убедитесь, что не происходит конфликта портов. Убедитесь, что PHP-FPM слушает на правильном порту и в конфигурации Nginx указан правильный адрес и порт для соединения с PHP-FPM.

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

Если после проверки указанных выше причин проблема не устраняется, рекомендуется дополнительно изучить журналы ошибок Nginx (/var/log/nginx/error.log) и PHP-FPM (/var/log/php-fpm.log) для получения более подробной информации о возникшей ошибке. Это поможет уточнить проблему и найти специфическое решение для вашей конфигурации

Если это всеже dos атака то можно

  • 1) заблокировать пачки ип адресов.
  • 2) выдавать статическую страницу с вставкой жс и динамичекую страницу
  • 3) регулировать и ограничить количество запросов в единицу времени

1) заблокировать пачки ип адресов.

Для этого в нжин файл в секцию сервер добавьте эти ип адреса, например

deny 93.91.115.16;
deny 45.152.188.241; 

#или заблокируйте все кроме своего ип

allow 1.1.1.1;
deny all;

Получить список всех подозрительных ип легко из логов с помощью регулярых выражений (потом нужно разрешить посиковивки иливооще снять ограничения).

#распарсить ip
grep -oE '(^| )((25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])){3})($| )' /var/www/site.com/logs/nginxaccess.log | sort | uniq

#добавить deny  и точку с запятой 
sed -i 's/^/deny /; s/$/;/' /var/www/site.com/logs/nginxaccess.log

Добавляем этот список через инклуде в nginx, перезапускаем

server {
   #return 401; -можем временно включить

    server_name    intellect.icu;
    root           /var/www/intellect.icu/;
    index          index.php;

#    error_log /var/www/intellect.icu/logs/nginxerror.log; - временно отключаем
    access_log /var/www/intellect.icu/logs/nginxaccess.log;

include /etc/nginx/blockips.conf; 
...

2) выдавать статическую страницу с вставкой жс и динамичекую страницу

Если все запросы дрос атаки выполнятся с разных ип адресов но на один урл например индекс то можно попосбовать добвить выдачу разных страниц для главной других, Для настройки Nginx так, чтобы он отдавал статическую страницу index.html для индексного запроса (запроса на корневой URL) и обрабатывал все остальные URL через файл index.php, вы можете использовать два отдельных location блока в конфигурации Nginx. Вот как это можно сделать:

server {
    listen 80;
    server_name example.com;

    # Корневой каталог вашего веб-сайта
    root /path/to/your/website;

    location = / {
        # Обработка индексного запроса
        index index.html;
        try_files $uri $uri/ /index.html;
    }

    location / {
        # Обработка всех остальных URL через index.php
        index index.php;
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        # Настройки обработки PHP файлов (FastCGI, PHP-FPM и т. д.)
    }

    # Другие настройки сервера
}

3) регулировать и ограничить количество запросов в единицу времени

Чтобы регугировать количество запростов в единицу времени Nginx можно использовать модуль ngx_http_limit_req

Так же можно попробовать сделать ограничение скорости обработки запросов в nginx с помощью встроенного модуля ngx_http_limit_req.

в файл конфигурационный файл Nginx. Обычно это файл /etc/nginx/nginx.conf добавьте

   limit_req_zone $binary_remote_addr zone=limit_by_ip:10m rate=2r/m;
   limit_req_zone $request_uri zone=limit_by_url:10m rate=5r/s;


Далее, в блоке server, к которому хотите применить ограничение, добавьте следующую директиву limit_req:

server {
    # ... Другие настройки nginx...

    location / {
        # Применяем ограничение из зон "limit_by_ip и limit_by_url"
        limit_req zone=limit_by_ip;
        limit_req zone=limit_by_url;
        #если нужно применить паарметры burst или nodelay

        limit_req zone=limit_by_url burst=5 nodelay;
        # Другие директивы обработки запросов
    }

    # ... Другие настройки nginx...
}​

В приведенном выше примере мы создали зону ограничения с именем "limit_by_ip" и объемом 10 МБайт. Мы установили ограничение до 2х запросов в секунду (rate=2r/s) для каждого уникального IP-адреса ($binary_remote_addr). И зону ограничения с именем "limit_by_url" и объемом 10 МБайт с ограничением до 5-ти запросов в секунду (rate=5r/s) для каждого уникального урл ($request_uri ).

При этом NGINX будет использовать алгоритм «дырявое ведро» (leaky bucket). Для NGINX 300r/m и 5r/s одинаковы: он будет пропускать один запрос каждые 0,2 с. В данном случае NGINX каждые 0,2 секунды будет устанавливать флаг, разрешающий прием запроса. Когда приходит подходящий для этой зоны запрос, NGINX снимает флаг и обрабатывает запрос. Если приходит очередной запрос, а таймер, считающий время между пакетами, еще не сработал, запрос будет отклонен с HTTP кодом состояния 503. Если время истекло, а флаг уже установлен в разрешающее прием значение, никаких действий предприниматься не будет.

Используя параметр burst флаг блокировки может принимать значения не только истина и ложь но больше единицы. В этом случае он будет иметь значение максимального количество запросов, которые NGINX должен пропустить в рамках одной пачки (burst). Таким образом это уже алгоритм не «дырявое ведро», а «маркерная корзина» (token bucket). Параметр rate определяет временной интервал между запросами, но мы имеем дело не с токеном типа true/false, а со счетчиком от 0 до 1 + burst. Счетчик инкрементитсья при каждом запрсае в рассчитанный интервал времени (срабатывает таймер), достигая максимального значения в b+1. то есть : burst — это количество запросов, а не скорость их пропускания, тоесть шейпинг трафика.

Таким образом борьба с атаками отказа в обслуживании (DoS) - это важная задача для обеспечения надежной работы веб-сервера и защиты от недоступности веб-ресурса для легитимных пользователей. Вот несколько способов борьбы с DoS атаками:

  1. Ограничение скорости запросов (Rate Limiting): Установите ограничение скорости для запросов с определенных IP-адресов. Это поможет предотвратить чрезмерную нагрузку на сервер от одного и того же IP и снизить воздействие DoS атаки.

  2. Использование CDN: Используйте Content Delivery Network (CDN), чтобы распределить трафик и предоставить более высокую пропускную способность. CDN поможет смягчить нагрузку на ваш веб-сервер и уменьшить влияние DoS атак.

  3. Фильтрация трафика: Используйте механизмы фильтрации трафика, чтобы блокировать или ограничивать доступ с IP-адресов, из которых идет подозрительно большое количество запросов.

  4. Облачные решения: Рассмотрите возможность использования облачных сервисов защиты от DDoS атак, таких как Cloudflare, AWS Shield или Google Cloud Armor. Эти сервисы предоставляют распределенные механизмы защиты, которые помогают обнаруживать и смягчать атаки.

  5. Проверка пользовательских данных: Убедитесь, что ваше приложение или сервер тщательно проверяют пользовательские данные, чтобы предотвратить использование уязвимостей для запуска DoS атак.

  6. Мониторинг и обнаружение атак: Разверните системы мониторинга и обнаружения атак, которые помогут выявлять подозрительное поведение и аномальный трафик. Это поможет своевременно реагировать на атаки и принимать меры.

  7. Планирование отказа (Fail2Ban): Используйте инструменты, такие как Fail2Ban, чтобы автоматически блокировать IP-адреса с которых идет много неудачных попыток аутентификации или запросов. Это поможет предотвратить атаки перебора паролей и другие DoS атаки.

  8. Настройка веб-сервера: Правильно настройте веб-сервер и его параметры, чтобы обеспечить лучшую производительность и устойчивость к DoS атакам.

Помните, что защита от DoS атак - это комплексный процесс, и эффективность каждого подхода зависит от характеристик и конфигурации вашего веб-сервера. Рекомендуется применять несколько методов и обновлять свои меры безопасности, чтобы оставаться защищенным от новых угроз.

создано: 2023-08-08
обновлено: 2023-08-08
132265



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)

Термины: Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)