#Симптомы и отличие от похожих неисправностей
В конфигурации пула включили pm.status_path, но запрос к адресу статуса возвращает 404, 403 или 502. Как проверить путь, передачу FastCGI и ограничение доступа только для администратора, не публикуя сведения о процессах. Это не общая инструкция по включению мониторинга: здесь статус уже включён, однако запрос либо не доходит до нужного пула, либо блокируется веб-сервером. Причину нужно различать по коду ответа.
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| В Nginx отсутствует подходящий locationДиректива в FPM не создаёт URL в веб-сервере: FastCGI-запрос должен передаваться правильно. | В браузере 404 от Nginx, хотя FPM работает и php-сайт доступен. | Проверить точное совпадение маршрута и fastcgi_pass. |
Правила доступа запрещают тестСтатус осознанно закрыт для внешних IP-адресов через allow/deny, Basic Auth или сеть управления. | Снаружи 403, а запрос по разрешённому каналу с сервера успешен. | Не ослаблять защиту; использовать локальный запрос или закрытый туннель. |
| Неверный сокет или PHP-FPM не применил правкуСтатус настроен у другого пула или FastCGI ведёт в неработающую службу. | В Nginx 502 и записи connect() ... failed, обычная PHP-страница тоже не открывается. | Сверить listen, обработчик и перезагрузку нужной службы. |
#Диагностика и пошаговое устранение
- Определите точный код ответа и точку обращенияСначала откройте статус по согласованному закрытому административному адресу, не пересылайте ссылку другим людям. Запишите код 404, 403 или 502 и момент запроса; в журнале Nginx найдите совпадающую строку. Код 403 с внешнего компьютера может быть нормой, если статус специально закрыт от интернета. Не выключайте ограничения ради проверки.
- Проверьте status-путь именно в активном пулеВ панели домена узнайте, какой PHP-FPM обслуживает сайт, и найдите соответствующий файл пула. Убедитесь, что
pm.status_path = /fpm-statusзадан без опечатки и соответствует URI, который передаётся в FastCGI. Запишите путьlistenи существование пула. Если путь начинается не с/, исправьте его: статусный URI должен быть задан как путь, а не доменное имя или имя файла. - Пример в конфигурации конкретного пулаINIПример в конфигурации конкретного пула. Если URI у вас другой, сохраняйте согласованное имя; избегайте пересечения с публичным маршрутом приложения.
pm.status_path = /fpm-status
- Проверьте, куда Nginx направляет запрос к статусуОткройте конфигурацию виртуального сервера через панель либо у администратора. Там должен существовать отдельный location для указанного пути с
fastcgi_passна тот же пул, что обслуживает сайт (или отдельный статусный listen при его настройке). Например,location = /fpm-statusисключает случайные совпадения с другими URL. Если статус возвращает страницу приложения, запрос попадает в общийtry_filesвместо специального location. - Иллюстрация для локального IPv4 и условного сокетаNginxИллюстрация для локального IPv4 и условного сокета. Обязательно замените сокет на фактический
listen; проверьте отдельный доступ по IPv6, VPN, прокси и схему маршрутизации. Не публикуйте статус.location = /fpm-status { allow 127.0.0.1; deny all; include fastcgi_params; fastcgi_pass unix:/run/php/example.sock; }
- Сверьте безопасность и интерпретацию 403Если в location стоит
allow 127.0.0.1; deny all;, браузер с внешнего IP закономерно получает 403. Проверяйте через локальное соединение на сервере с правильным именем виртуального хоста и действующим сертификатом либо через разрешённый защищённый административный канал. Не задавайтеallow allили публичное открытие пути: статус показывает число процессов, очередь и адреса запросов.
- Разберите 502 через путь сокета, а не через статус-параметрВ журнале Nginx ищите
connect() to unix:... failed; сравните путь сlistenв файле пула и проверьте, активен ли PHP-FPM. Если сокет отсутствует, устраните неисправность запуска службы. Если естьPermission denied, приведите в соответствие группу веб-сервера иlisten.owner/ACL, не ставьте права 777. Только после того как обычный PHP-запрос работает, возвращайтесь к статусу.
- Проверьте синтаксис Nginx и PHP-FPM перед применениемЕсли меняли оба файла, сохраните их резервные копии, затем выполните тесты соответствующих бинарников. На Debian PHP 8.2:
sudo php-fpm8.2 -tиsudo nginx -t. При обеих успешных проверках применитеsudo systemctl reload php8.2-fpmиsudo systemctl reload nginx. При любой ошибке остановитесь, восстановите копию ошибочного файла и снова протестируйте; перезагрузка не должна скрывать синтаксическую ошибку. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
- Получите ответ через разрешённый канал и проверьте содержимоеИз закрытого административного канала откройте
/fpm-statusи убедитесь, что видны поляpool,process manager,active processes,listen queue,max children reached. Если вместо них приходит HTML приложения, повторно проверьте location и порядок обработки маршрутов. Если отображается информация другого пула,fastcgi_passнастроен неправильно. При ошибках верните сохранённые настройки location и статус-пути, затем повторите тест конфигурации.
- Закрепите закрытый доступ и уберите временные способы диагностикиПосле успешного теста убедитесь, что внешний неавторизованный запрос по-прежнему получает 403 либо не имеет маршрута. Запишите в документацию внутренний адрес, разрешённые IP и имя пула; не публикуйте снимки статуса с URL активных запросов. Если использовали временный администраторский туннель, закройте его. Статус пула нельзя путать со страницей обычной проверки здоровья приложения.
#Как проверить результат и что предпринять при неуспехе
Успех — статус доступен через разрешённый маршрут и показывает верный пул, а извне остаётся закрытым. При 404 проверяйте совпадение location/pm.status_path, при 502 — соединение FastCGI, при 403 — ожидаемую политику доступа. Верните резервные копии при ошибках конфигурации и проведите повторный тест перед reload.