如何在 Nginx 中启用和监控 PHP-FPM 状态?

linuxoperating systemopen source

PHP-FPM(FastCGI 进程管理器)是 PHP 作为 FastCGI 进程管理器的一种流行实现。它比传统的 PHP 实现提供了显著的性能提升,并广泛应用于高流量网站。Nginx 是一个流行的 Web 服务器和反向代理,可以通过 PHP-FPM 为 PHP 应用程序提供服务。在本文中,我们将讨论如何在 Nginx 中启用和监控 PHP-FPM 状态。

启用 PHP-FPM 状态页面

PHP-FPM 附带一个内置状态页面,可提供有关 PHP-FPM 进程当前状态的实时信息。在 Nginx 中启用 PHP-FPM 状态页面非常简单。

首先,使用您常用的文本编辑器打开 PHP-FPM 配置文件。此文件的位置可能因您的系统配置而异。例如,在 Ubuntu 上,该文件位于 /etc/php/7.4/fpm/pool.d/www.conf。

接下来,取消注释以下行 -

pm.status_path = /status
ping.path = /ping

这些行启用状态和 ping 页面。保存更改并重启 PHP-FPM 服务 -

sudo service php7.4-fpm restart

接下来,编辑 PHP 应用程序的 Nginx 配置文件。将以下 location 块添加到 server 块 -

location ~ ^/(status|ping)$ {
   access_log off;
   allow 127.0.0.1;
   deny all;
   include fastcgi_params;
   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   fastcgi_param SCRIPT_NAME $fastcgi_script_name;
   fastcgi_param REQUEST_METHOD $request_method;
   fastcgi_param QUERY_STRING $query_string;
   fastcgi_param CONTENT_TYPE $content_type;
   fastcgi_param CONTENT_LENGTH $content_length;
   fastcgi_pass 127.0.0.1:9000;
}

此位置块仅允许从本地主机访问状态和 ping 页面。您可以更改 IP 地址以允许从其他 IP 地址访问。

保存更改并重新加载 Nginx 配置 -

sudo service nginx reload

现在,您可以通过访问 http://your-domain.com/status 访问 PHP-FPM 状态页面,并通过访问 http://your-domain.com/ping 访问 ping 页面。如果所有配置均正确无误,您应该会看到一个包含 PHP-FPM 进程实时信息的页面。

监控 PHP-FPM 状态

监控 PHP-FPM 状态页面是维护 PHP 应用程序健康运行的重要组成部分。它允许您检测和诊断 PHP-FPM 进程的问题。

监控 PHP-FPM 状态页面的一种方法是使用 curl 之类的工具。例如,要获取状态信息,您可以运行以下命令 -

curl http://your-domain.com/status

此命令将在您的终端中输出状态信息。

监控 PHP-FPM 状态页面的另一种方法是使用监控工具,例如 Nagios、Zabbix 或 Prometheus。这些工具允许您根据 PHP-FPM 进程的状态设置警报和通知。

除了使用 curl 和 Nagios 等工具监控 PHP-FPM 状态页面外,还有几种基于 Web 的监控工具可用。其中一个常用的工具是 PHP-FPM 状态页面脚本,它是一个基于 Web 的脚本,可提供 PHP-FPM 进程的详细概述。此脚本可以轻松安装到您的服务器上,并配置为实时监控 PHP-FPM 进程。

另一种选择是使用 PHP-FPM 的内置监控功能。PHP-FPM 内置了多个监控工具,包括我们之前启用的 pm.status_path 和 ping.path 指令。这些工具提供有关 PHP-FPM 进程状态的详细信息,包括活动进程数、空闲进程数以及处理的请求总数。

您还可以使用 pm.status_listen 指令启用 TCP/IP 套接字来监控 PHP-FPM 状态。这样您就可以使用 telnet 等工具连接到套接字并实时查看状态信息。

需要注意的是,虽然监控 PHP-FPM 状态页面对于维护健康的 PHP 应用程序至关重要,但监控其他指标(例如 CPU 和内存使用情况)也同样重要。这些指标可以帮助您识别性能瓶颈并优化 PHP-FPM 配置,从而提升性能。

监控 PHP-FPM 状态的另一种方法是使用第三方监控服务,例如 New Relic 或 Datadog。这些服务可以提供有关 PHP 应用程序性能的详细洞察,包括与 PHP-FPM 进程相关的指标。

例如,New Relic 为 PHP 应用程序提供实时性能监控和诊断。它可以配置为监控 PHP-FPM 进程,并提供有关 CPU 和内存使用情况以及其他重要指标的洞察。它还可以在超出性能阈值时发送警报和通知,帮助您主动识别和解决性能问题。

Datadog 是另一种流行的监控服务,可用于监控 PHP-FPM 进程。它可以提供对 PHP 应用程序性能的实时可见性,包括与 PHP-FPM 进程相关的详细指标。它还可以配置为在超出性能阈值时发送警报和通知。

除了监控 PHP-FPM 状态外,优化 PHP-FPM 配置以获得更佳性能也至关重要。pm.max_children 指令是一个重要的配置参数,它决定了可以生成的用于处理传入请求的 PHP-FPM 子进程的最大数量。将此值设置得太高可能会导致资源耗尽,而将其设置得太低则会导致排队时间过长而性能不佳。

另一个重要的配置参数是 pm.max_requests 指令,它决定了每个 PHP-FPM 子进程在被回收之前可以处理的最大请求数。将此值设置得太高可能会导致内存泄漏和不稳定,而将其设置得太低则会导致不必要的进程回收和开销。

配置 PHP-FPM 时,考虑服务器上的可用资源也很重要。例如,如果可用内存有限,则可能需要降低 pm.max_children 的值以防止资源耗尽。同样,如果您的 CPU 资源有限,则可能需要调整 pm.process_idle_timeout 指令,以防止空闲进程消耗宝贵的 CPU 周期。

最后,需要注意的是,启用 PHP-FPM 状态也可能存在安全隐患。状态页面可能会向攻击者提供有价值的信息,包括活动进程数和已处理的请求总数。务必确保状态页面只能从受信任的 IP 地址访问,并且使用身份验证和授权机制妥善保护访问。

监控和优化 PHP-FPM 的另一个重要方面是分析 PHP 错误日志。PHP 错误日志可以提供宝贵的洞察,帮助您了解可能影响 PHP 应用程序性能和稳定性的潜在问题和错误。通过分析这些日志,您可以识别和诊断与 PHP-FPM 进程相关的问题,例如内存泄漏、分段错误和其他错误。

您可以通过在 PHP 配置文件中设置 error_log 指令来配置 PHP 错误日志记录。默认情况下,PHP 会将错误记录到系统错误日志中,但您可以将其配置为将错误记录到特定文件或位置,以便于分析和监控。

除了错误日志之外,监控其他系统和应用程序日志也很重要,以发现可能影响 PHP-FPM 进程的潜在问题。例如,您可能需要监控 Nginx 访问日志和错误日志,以识别与请求和响应相关的潜在问题。

优化 PHP-FPM 性能的另一种方法是使用操作码缓存。操作码缓存可以缓存已编译的 PHP 代码并减少每次请求编译代码的开销,从而显著提高 PHP 性能。常用的操作码缓存解决方案包括 APCu、OpCache 和 XCache。

结论

在 Nginx 中启用和监控 PHP-FPM 状态页面是维护 PHP 应用程序健康运行的一种简单有效的方法。通过按照本文概述的步骤,您可以轻松启用 PHP-FPM 状态页面并使用您喜欢的工具对其进行监控。


相关文章


有用资源