我正在尝试通过http调用设置并获取php-fpm统计信息。我知道可以使用service status命令,但是我想从浏览器中获取它。
我正在运行php7和apache,这就是我在服务器配置中所做的。
在apache端,我用以下命令创建了一个虚拟主机:
<LocationMatch "/fpm-status">
Order Allow,Deny
Allow from 127.0.0.1
ProxyPass fcgi://127.0.0.1:9000
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)
在php pool配置中(/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
Run Code Online (Sandbox Code Playgroud)
但是在重启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:~$
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
我想知道如何真正进行设置。我已经在Google上搜索了很长时间,但没有得到确切的答案,每个人都在尝试自己的方式。谁负责创建状态页面(本例中为fpm-status)?该页面何时以及如何生成(我猜是通过php-fpm生成的)?设置页面并通过浏览器访问的正确方法是什么?
小智 12
现在可能有点晚了,但我想用 php-fpm(7.1+)/apache(2.4) 发布一个直接简单的答案,因为我在网上找到的大多数答案都有些复杂。这是使用需要 unix 套接字与端口映射的默认 php-fpm 设置。
1)在 中/etc/php-fpm.d/www.conf
,我为下面的监听袜子设置了以下配置选项并取消注释:
listen = /var/run/php-fpm.sock
pm.status_path = /fpm-status
Run Code Online (Sandbox Code Playgroud)
2)使用我的 apache 配置php-latest.conf
(或类似配置),我添加了一个查找 fpm-status 的匹配项并将其设置proxypass
为 unix 套接字并从 fcgi 运行 fpm-status。它还限制它,因此只有本地主机可以调用它:
<LocationMatch "/fpm-status">
Order Allow,Deny
Allow from 127.0.0.1
ProxyPass unix:/var/run/php-fpm.sock|fcgi://localhost/fpm-status
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题,并花了几个小时来解决我们的安装问题。不幸的是,我无法回答您在那里提出的所有问题,这主要是“使用 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
Run Code Online (Sandbox Code Playgroud)
步骤 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>
Run Code Online (Sandbox Code Playgroud)
步骤 3:检查 /etc/php/7.0/fpm/pool.d/www.conf 确保取消注释状态路径:
pm.status_path = /fpm-status
Run Code Online (Sandbox Code Playgroud)
步骤 4:保护页面(可选) 在投入生产之前,以某种方式保护页面当然是明智的,例如:
Order deny,allow
Deny from all
Allow from [Some-IP]
Run Code Online (Sandbox Code Playgroud)
希望这有帮助,干杯。
归档时间: |
|
查看次数: |
8560 次 |
最近记录: |