我正在尝试使用http调用设置并获取php-fpm统计信息。我知道可以使用服务状态命令,但我希望从浏览器中获取该命令。
我正在运行php7和apache,这就是我在服务器配置中所做的。
在apache方面,我创建了一个vhost:<LocationMatch "/fpm-status">
Order Allow,Deny
Allow from 127.0.0.1
ProxyPass fcgi://127.0.0.1:9000
</LocationMatch>
在php池配置中( /etc/php/7.0/fpm/pool.d/www.conf )我有这个:
[www]
user = www-data
group = www-data
listen = 127.0.0.1:9000
listen.owner = www-data
listen.group = www-data
pm = ondemand
pm.max_children = 1000
pm.start_servers = 150
pm.min_spare_servers = 50
pm.max_spare_servers = 400
pm.max_requests = 200
pm.process_idle_timeout = 5s
pm.status_path = /fpm-status
但重新启动apache和php-fpm进程后,当我尝试使用curl时,我得到了这个输出:
admin@ip-10-3-23-78:~$curl http://localhost/fpm-status
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /fpm-status
on this server.<br />
</p>
</body></html>
admin@ip-10-3-23-78:~$
在apache日志文件中我有这个:
==> /var/log/apache2/error.log <==
[Thu Aug 25 13:36:10.776665 2016] [access_compat:error] [pid 12608] [client ::1:23142] AH01797: client denied by server configuration: proxy:fcgi://127.0.0.1:9000
我想知道如何真正做到这一点。我用谷歌搜索了很长时间并没有得到一个确切的答案,每个人都在尝试他的方式。 谁负责创建状态页面(在我的情况下 fpm-status )?何时以及如何生成此页面(我猜是通过php-fpm)? 设置页面并从浏览器访问的正确方法是什么?
答案 0 :(得分:3)
我遇到了同样的问题,并在那里花了几个小时为我们的装置解决它。不幸的是我无法回答你在那里提出的所有问题,这主要是一个工作的解决方案,用于“使用php7和apache设置php-fpm状态页面”
我们走了(Ubuntu 16.04):
第1步:需要的东西 只要检查一下你是否同样安装了这些东西:
apt-get -y install apache2
apt-get -y install libapache2-mod-fastcgi php7.0-fpm php7.0
a2enmod actions fastcgi alias
systemctl restart apache2.service
第2步:设置fastcgi 在/etc/apache2/mods-available/fastcgi.conf(或类似)中输入以下内容:
<IfModule mod_fastcgi.c>
# Define a named handler
AddHandler php7-fcgi .php
# Generate an alias pointing to /usr/lib/cgi-bin/php[VersionNumber]-fcgi
Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi
# Configure an external server handling your upcoming requests (note where the alias is pointing towards)
FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization
# only on if fpm-status is match. You might want to put this into your concrete vhost.conf file. For the testing, fastcgi.conf should work.
<LocationMatch "/fpm-status">
# set the before defined handler here
SetHandler php7-fcgi
# use the handler for the action handling virtual requests
Action php7-fcgi /php7-fcgi virtual
</LocationMatch>
</IfModule>
第3步:检查你的/etc/php/7.0/fpm/pool.d/www.conf 确保取消注释状态路径:
pm.status_path = /fpm-status
第4步:保护页面(可选) 在投入生产之前,以某种方式保证这一点当然是明智的,例如:
Order deny,allow
Deny from all
Allow from [Some-IP]
希望这会有所帮助,欢呼。
答案 1 :(得分:3)
如果您在apache服务器上运行其他Web应用程序,则其中一个可能带有一个.htaccess
文件,该文件会干扰处理/staus
页面(或您在其中命名该页面的任何内容) php-fpm池配置)。
我最近遇到了一个nextcloud实例。在nextcloud-(apache)-configuration中,将URL列入白名单并禁用此路径(.htaccess
的{{1}}-overrides使该页面可访问。
确保使用正确的路径替换套接字的路径(这是Ubuntu 16.04的示例)。
RewriteEngine Off
套接字路径在以下位置定义
默认的ubuntu版本为<FilesMatch "^ping|status$">
RewriteEngine Off
SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
</FilesMatch>
(/etc/php/7.2/fpm/pool.d/www.conf
)。
答案 2 :(得分:1)
现在可能会晚一点,但是我想使用php-fpm(7.1 +)/ apache(2.4)发布一个针对此问题的简单直接答案,因为我在网上找到的大多数答案都有些复杂。这是使用默认的php-fpm设置,该设置需要Unix套接字与端口映射。
1)在php-fpm.d / www.conf中,我为下面的监听袜子设置了以下配置选项,并且未作注释
listen = /var/run/php-fpm.sock
pm.status_path = /fpm-status
2)使用我的apache config php-latest.conf,添加了一个查找fpm-status的匹配项,并将其设置为unix套接字的proxypass并从fcgi运行fpm-status。它还限制了它,因此只有localhost可以调用它。
<LocationMatch "/fpm-status">
Order Allow,Deny
Allow from 127.0.0.1
ProxyPass unix:/var/run/php-fpm.sock|fcgi://localhost/fpm-status
</LocationMatch>
3)只需在本地运行curl命令
#curl http://localhost/fpm-status
pool: www
process manager: dynamic
start time: 16/Oct/2019:11:33:25 -0400
start since: 14
accepted conn: 12
listen queue: 0
max listen queue: 0
listen queue len: 0
idle processes: 38
active processes: 2
total processes: 40
max active processes: 5
max children reached: 0
slow requests: 0
答案 3 :(得分:0)
如果您收到权限错误,请尝试添加
listen.mode = 0666
到 /etc/php/7.0/fpm/pool.d/www.conf
虽然我仍然无法查看状态页面并且在尝试时遇到404错误,但是我需要使用php-fpm正常运行整个fastcgi堆栈。