У меня есть попытка получить php-fpm страницу состояния. Когда я открываю / страницу состояния в веб-браузере или непосредственно к fcgi - это говорит что Файл, не найденный.
Вы могли помочь - как зафиксировать это.
# grep -ER "status|ping" /etc/php5/* | grep -v ":;"
/etc/php5/fpm/pool.d/www.conf:pm.status_path = /status
/etc/php5/fpm/pool.d/www.conf:ping.path = /ping
/etc/php5/fpm/pool.d/www.conf:ping.response = pong
# SCRIPT_NAME=/status SCRIPT_FILENAME=/status QUERY_STRING= REQUEST_METHOD=GET cgi-fcgi -bind -connect /var/run/php-fpm-www.sock
Primary script unknown
Status: 404 Not Found
Content-type: text/html
File not found.
# SCRIPT_NAME=/ping SCRIPT_FILENAME=/ping REQUEST_METHOD=GET cgi-fcgi -bind -connect /var/run/php-fpm-www.sock
Primary script unknown
Status: 404 Not Found
Content-type: text/html
File not found.
У меня была такая же проблема, и я просто собираюсь описать, что мне нужно, чтобы она работала. Вы не поделились подробностями о конфигурации php-fpm или nginx (если это то, что вы используете в качестве веб-сервера). Обратите внимание, что вам может потребоваться выполнить приведенные ниже инструкции с sudo / как root перед командами, чтобы иметь права на изменение файлов или перезапуск служб.
В php-fpm config
vi /etc/php-fpm.d/www.conf
Найдите директиву пути статуса и включите it
pm.status_path = /status
Затем убедитесь, что nginx может вызвать это местоположение. В вашей конфигурации сайта nginx
vi /etc/nginx/conf.d/mysite.conf
Добавить
location ~ ^/(status|ping)$ {
access_log off;
#allow 127.0.0.1;
#allow 1.2.3.4#your-ip;
#deny all;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
}
Уведомление выше я закомментировал инструкции разрешить и запретить, чтобы страница состояния была включена с любого IP. Убедитесь, что это не включено в производственной среде. Теперь перезапустите и nginx, и php-fpm
sudo service nginx restart
sudo service php-fpm restart
. Теперь вызов страницы состояния из браузера должен работать
Если вы хотите сделать это из командной строки на debian.
как root
watch service php5-fpm status
Для php7.0 используйте эти коды, чтобы активировать статус.
В файле по умолчанию в / etc / nginx / sites-available /
location /status {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
log_not_found off;
}
Раскомментируйте следующую строку в www.conf (файл) в /etc/php/7.0/fpm/pool.d (расположение)
pm.status_path = /status
Перезапустить оба nginx / php7.0
sudo systemctl restart nginx
sudo systemctl restart php7.0-fpm
Теперь в веб-браузере введите этот адрес, чтобы получить полный подробный отчет о текущих запущенных сценариях php на текущем активном веб-сервере, где php7.0 настроен для работы.
http://yoursite.net/status?html&full
Кроме того, убедитесь, что он защищен паролем, чтобы защитить его от злоумышленников, как описано здесь
I была аналогичная проблема в Ubuntu 18.04 с PHP 7.2.
Обнаружено, что эти строки были недавно добавлены в snippet / fastcgi-php.conf
# Check that the PHP script exists before passing it
try_files $fastcgi_script_name =404;
по умолчанию, а так как файла для pm.status_path
нет - возвращается 404;
Итак, для мне - мне пришлось удалить include snippet / fastcgi-php.conf
Вам все равно нужно пройти REQUEST_METHOD
, QUERY_STRING
, SCRIPT_NAME
и SCRIPT_FILENAME
. Просто сделайте это без snippet / fastcgi-php.conf
. Часто у вас будет fastcgi.conf
, который будет работать.
Просто вмешиваюсь, поскольку другие ответы не помогли мне решить эту проблему.
Все, что мне нужно было сделать (после настройки конфигурации пула fpm и расположения nginx
), было
сенсорного статуса
в корне сайта nginx.
Я не знаю, сколько из следующего необходимо, но оно работает:
location ^~ /status {
access_log off;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
^ ~
можно заменить на =
. Посетите https://stackoverflow.com/questions/5238377/nginx-location-priority для получения дополнительной информации
Мистер. Любознательному тоже было любопытно. php-fpm заботится только о том, чтобы параметры SCRIPT_NAME
и SCRIPT_FILENAME
соответствовали значению параметра pm.status_path
.
Таким образом, ниже показано минимальное расположение nginx для доступа к информации о статусе:
location = /a_random_path_here_ODY1NjY3Mj/fpm-status {
include fastcgi_params;
#'/status' is the value of pm.status_path in /etc/php/7.1/fpm/pool.d/www.conf
fastcgi_param SCRIPT_NAME '/status';
fastcgi_param SCRIPT_FILENAME '/status';
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
}
Явным образом указав значения параметров, местоположение страницы статуса можно назвать как угодно и оно может находиться на любом пути, а не только /status
. Наличие случайного пути также помогает предотвратить создание ненужных записей в журнале от всех видов сканеров.
В рабочей среде, очевидно, следует добавить директивы allow
/deny
или защиту паролем для расположения, но приведенная выше минимальная необходимая конфигурация.
То же самое можно сделать и для ping uri (параметр ping.path
), если он включен.