[英]Set up php-fpm status page with php7 and apache
我正在嘗試通過 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>
在 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)? 設置頁面並從瀏覽器訪問的正確方法是什么?
現在可能有點晚了,但我想用 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
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>
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
我遇到了同樣的問題,並在那里花了幾個小時來解決我們的安裝問題。 不幸的是,我無法回答您在那里提出的所有問題,這主要是“使用 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]
希望這有幫助,干杯。
如果您在 apache-server 上運行其他 Web 應用程序,則其中一個可能附帶一個.htaccess
文件,該文件會干擾處理/staus
頁面(或您在 php-fpm 池配置中為該頁面命名的任何內容)。
我最近在 nextcloud 實例中遇到了這個問題。 在 nextcloud-(apache)-configuration 中,將 URL 列入白名單並禁用此路徑的.htaccess
-overrides ( RewriteEngine Off
) 使該頁面在我的情況下可訪問。 確保用正確的路徑替換套接字的路徑(這是 Ubuntu 16.04 的示例)。
<FilesMatch "^ping|status$">
RewriteEngine Off
SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
</FilesMatch>
注意正如評論中所指出的,正確的指令可能是<Location "^ping|status$">
而不是<FilesMatch>
。
socket-path 在默認 ubuntu 版本中定義在/etc/php/7.2/fpm/pool.d/www.conf
( listen = /run/php/php7.2-fpm.sock
)。
如果您收到權限錯誤,請嘗試添加
listen.mode = 0666
到/etc/php/7.0/fpm/pool.d/www.conf
盡管我仍然無法查看狀態頁面並且在我嘗試時收到 404 錯誤,但這對我使整個 fastcgi 堆棧與 php-fpm 正常運行是必要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.