Я пытаюсь получить страницу статуса 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
vi /etc/php-fpm.d/www.conf
Найдите директиву пути статуса и включите ее
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
Вызов страницы состояния из браузера теперь должен работать
Для 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
Кроме того, убедитесь, что он защищен паролем, чтобы защитить его от злоумышленников, как описано здесь.
У меня была аналогичная проблема с 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 location
) был
touch status
в корне сайта 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
настройка), если включено.
Если вы хотите сделать это из командной строки в debian.
как корень
watch service php5-fpm status