Попалась тебе в логе строчка вроде:
connect() to unix:/var/run/php/php7.x-fpm.sock failed (11: Resource temporarily unavailable) while connecting to upstream
Поздравляю, Nginx не смог достучаться до PHP-FPM. Что это значит? Функция connect() постучалась в сокет /var/run/php/php7.x-fpm.sock — но тот сказал «ресурс недоступен». В переводе с технарского: PHP-FPM занят под завязку или вообще не запущен.
Часто рядом висит и такое:
upstream timed out (110: Connection timed out) while reading response header from upstream
Это уже другая песня: Nginx всё-таки подключился к PHP-FPM, но тот думал слишком долго, и таймаут истёк.
Что делать, если хочется, чтобы всё жило?
1️⃣ Проверь, жив ли PHP-FPM
Запусти:
systemctl status php7.x-fpm
Если он мёртв — оживи:
systemctl start php7.x-fpm
(Или перезапусти, если думаешь, что завис: systemctl restart php7.x-fpm)
2️⃣ Убедись, что путь к сокету верный
Многие путают. В конфиге Nginx (fastcgi_pass) путь к сокету должен совпадать с тем, что указан в конфиге PHP-FPM (listen). Разные версии PHP — разные сокеты: php7.4-fpm.sock, php8.1-fpm.sock и так далее. Проверь дважды.
3️⃣ Посмотри права на сокет
Иногда всё запущено, а Nginx не может открыть сокет, потому что ему не дали права. Проверь:
ls -l /var/run/php/
Владелец — www-data или кто там у тебя? Если нет — поправь. Ещё посмотри, совпадают ли пользователи в конфигах Nginx и PHP-FPM.
4️⃣ Перезапусти Nginx после правок
Любые изменения конфига требуют systemctl restart nginx. Иначе он не увидит новые пути или права.
5️⃣ Увеличь таймауты, если PHP тупит
В конфиге Nginx можно подкрутить время ожидания:
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
Для fastcgi аналогично — fastcgi_connect_timeout, fastcgi_read_timeout.
6️⃣ Проверь, не задохнулся ли сервер
Если всё выше не спасает — значит, PHP-FPM банально перегружен. Посмотри top или htop — грузят CPU и память под завязку? Может, воркеров мало? Открой php-fpm.conf или pool.d/www.conf и проверь pm.max_children. Если там стоит 5 — не удивляйся, что всё лежит.
В общем, ошибка простая: сокет закрыт, перегружен или недоступен. Чаще всего чинится рестартом PHP-FPM, правами на сокет и настройкой нормального лимита воркеров. Если после всего этого «ресурс всё ещё временно недоступен» — то это уже не ресурс, это ты. Расширяй сервер или оптимизируй код.
0 комментариев