实现,它允许像Nginx这样的Web服务器有效地处理PHP请求。在这篇博文中,我们将探讨如何在 Ubuntu 22.04 LTS 上配置 PHP-FPM,并充分利用这个强大的工具。
在Web开发领域,PHP是一种流行的服务器端脚本语言,用于创建动态网站和Web应用程序。PHP-FPM(FastCGI Process Manager)是一个PHP FastCGI
在 Ubuntu 22.04 上配置 PHP-FPM
在 Ubuntu 22.04 上安装 Nginx 和 PHP-FPM
首先,让我们从在 Ubuntu 22.04 上安装 Nginx 和 PHP-FPM 开始。您可以通过在终端中运行以下命令来安装这两个软件包:
<span class="pln">sudo apt install nginx php</span><span class="pun">-</span><span class="pln">fpm</span>
安装后,您可以通过运行以下命令来验证 PHP-FPM 服务是否正在运行:
<span class="pln">systemctl status php</span><span class="pun">-</span><span class="pln">fpm</span>
如果 PHP-FPM 正在运行,您应该会看到指示服务处于活动状态的状态消息。
有关安装 Nginx 的其他资源,请阅读下面的帖子:
- 如何在 Ubuntu Linux √ 上安装 Nginx
在 Ubuntu 上配置 PHP-FPM 和 Nginx
安装 Nginx 和 PHP-FPM 后,您需要将 Nginx 配置为使用 PHP-FPM。为此,您需要编辑 Nginx 配置文件。
Nginx 配置文件位于 。使用您喜欢的文本编辑器打开此文件:/etc/nginx/sites-available/default
<span class="pln">nano </span><span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">nginx</span><span class="pun">/</span><span class="pln">sites</span><span class="pun">-</span><span class="pln">available</span><span class="pun">/</span><span class="kwd">default</span>
在此文件中,找到以下行:
<span class="pln">index index</span><span class="pun">.</span><span class="pln">html index</span><span class="pun">.</span><span class="pln">htm</span><span class="pun">;</span>
添加到索引文件列表:index.php
<span class="pln">index index</span><span class="pun">.</span><span class="pln">html index</span><span class="pun">.</span><span class="pln">htm index</span><span class="pun">.</span><span class="pln">php</span><span class="pun">;</span>
接下来,找到以下行:
<span class="com"># pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000</span> <span class="com">#</span> <span class="com">#location ~ \.php$ {</span> <span class="com"># include snippets/fastcgi-php.conf;</span> <span class="com">#</span> <span class="com"># # With php-fpm (or other unix sockets):</span> <span class="com"># fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;</span> <span class="com"># # With php-cgi (or other tcp sockets):</span> <span class="com"># # fastcgi_pass 127.0.0.1:9000;</span> <span class="com">#}</span>
取消注释这些行并修改fastcgi_pass行以指向 PHP-FPM 套接字文件:
<span class="pln">location </span><span class="pun">~</span><span class="pln"> \.php$ </span><span class="pun">{</span><span class="pln"> include snippets</span><span class="pun">/</span><span class="pln">fastcgi</span><span class="pun">-</span><span class="pln">php</span><span class="pun">.</span><span class="pln">conf</span><span class="pun">;</span> <span class="com"># With php-fpm (or other unix sockets):</span><span class="pln"> fastcgi_pass unix</span><span class="pun">:</span><span class="str">/var/</span><span class="pln">run</span><span class="pun">/</span><span class="pln">php</span><span class="pun">/</span><span class="pln">php</span><span class="pun">-</span><span class="pln">fpm</span><span class="pun">.</span><span class="pln">sock</span><span class="pun">;</span> <span class="com"># With php-cgi (or other tcp sockets):</span> <span class="com"># fastcgi_pass 127.0.0.1:9000;</span> <span class="pun">}</span>
保存并关闭文件,然后重新启动 Nginx 以应用更改:
<span class="pln">sudo systemctl restart nginx</span>
自定义 PHP-FPM 池
默认情况下,PHP-FPM 创建一个进程池来处理所有 PHP 请求。但是,您可以为不同的 PHP 应用程序或虚拟主机创建其他池。
要创建新的 PHP-FPM 池,您需要在目录中创建新的配置文件。您可以创建默认池配置文件的副本并对其进行修改以满足您的需求:/etc/php/7.4/fpm/pool.d/
<span class="pln">cp </span><span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">php</span><span class="pun">/</span><span class="lit">7.4</span><span class="pun">/</span><span class="pln">fpm</span><span class="pun">/</span><span class="pln">pool</span><span class="pun">.</span><span class="pln">d</span><span class="pun">/</span><span class="pln">www</span><span class="pun">.</span><span class="pln">conf </span><span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">php</span><span class="pun">/</span><span class="lit">7.4</span><span class="pun">/</span><span class="pln">fpm</span><span class="pun">/</span><span class="pln">pool</span><span class="pun">.</span><span class="pln">d</span><span class="pun">/</span><span class="pln">idroot</span><span class="pun">.</span><span class="pln">conf</span>
打开新文件进行编辑:
<span class="pln">nano </span><span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">php</span><span class="pun">/</span><span class="lit">7.4</span><span class="pun">/</span><span class="pln">fpm</span><span class="pun">/</span><span class="pln">pool</span><span class="pun">.</span><span class="pln">d</span><span class="pun">/</span><span class="pln">idroot</span><span class="pun">.</span><span class="pln">conf</span>
根据需要更改池名称、侦听地址和端口、用户和组以及其他设置:
<span class="pun">[</span><span class="pln">idroot</span><span class="pun">]</span><span class="pln"> user </span><span class="pun">=</span><span class="pln"> nginx </span><span class="kwd">group</span> <span class="pun">=</span><span class="pln"> nginx listen </span><span class="pun">=</span> <span class="lit">127.0</span><span class="pun">.</span><span class="lit">0.1</span><span class="pun">:</span><span class="lit">9000</span><span class="pln"> listen</span><span class="pun">.</span><span class="pln">owner </span><span class="pun">=</span><span class="pln"> www</span><span class="pun">-</span><span class="pln">data listen</span><span class="pun">.</span><span class="kwd">group</span> <span class="pun">=</span><span class="pln"> www</span><span class="pun">-</span><span class="pln">data listen</span><span class="pun">.</span><span class="pln">mode </span><span class="pun">=</span> <span class="lit">0660</span><span class="pln"> pm </span><span class="pun">=</span> <span class="kwd">dynamic</span><span class="pln"> pm</span><span class="pun">.</span><span class="pln">max_children </span><span class="pun">=</span> <span class="lit">10</span><span class="pln"> pm</span><span class="pun">.</span><span class="pln">start_servers </span><span class="pun">=</span> <span class="lit">2</span><span class="pln"> pm</span><span class="pun">.</span><span class="pln">min_spare_servers </span><span class="pun">=</span> <span class="lit">1</span><span class="pln"> pm</span><span class="pun">.</span><span class="pln">max_spare_servers </span><span class="pun">=</span> <span class="lit">5</span><span class="pln"> php_admin_value</span><span class="pun">[</span><span class="pln">upload_max_filesize</span><span class="pun">]</span> <span class="pun">=</span> <span class="lit">10M</span><span class="pln"> php_admin_value</span><span class="pun">[</span><span class="pln">post_max_size</span><span class="pun">]</span> <span class="pun">=</span> <span class="lit">10M</span>
在此示例中,我们创建了一个名为 “” 的新 PHP-FPM 池,该池侦听端口 9000,并以 “” 用户和 “” 组的身份运行。我们还使用 .idroot
nginx
nginx
php_admin_value directive
保存并关闭文件,然后重新启动 PHP-FPM 服务以应用更改:
<span class="pln">sudo systemctl restart php7</span><span class="pun">.</span><span class="lit">4</span><span class="pun">-</span><span class="pln">fpm</span>
微调 PHP-FPM 设置
除了配置 PHP-FPM 池之外,还可以微调各种 PHP-FPM 设置以优化其性能。以下是您可以调整的一些关键设置:
pm.max_children
:此设置定义每个池可以生成的最大子进程数。您应该根据服务器的可用资源和站点接收的流量设置此值。pm.start_servers
:此设置定义 PHP-FPM 服务启动时应启动的子进程数。您应该根据站点上的预期流量负载设置此值。pm.min_spare_servers
和 :这些设置定义应保持运行以处理传入请求的空闲子进程的最小和最大数量。您应该根据网站上的预期流量负载设置这些值。pm.max_spare_servers
pm.max_requests
:此设置定义子进程在终止并替换为新进程之前应处理的请求数。这有助于防止长时间运行的进程可能出现的内存泄漏和其他问题。request_terminate_timeout
:此设置定义请求在终止之前可以花费的最长时间。这有助于防止长时间运行或停止的请求占用资源并影响 PHP-FPM 服务的整体性能。
若要调整这些设置,需要编辑已创建的每个 PHP-FPM 池的文件。此文件通常位于目录中。www.conf
/etc/php/7.4/fpm/pool.d/
例如,调整池的设置,将以下行添加到文件中:pm.max_children
example.com
www.conf
<span class="pln">pm</span><span class="pun">.</span><span class="pln">max_children </span><span class="pun">=</span> <span class="lit">50</span>
同样,调整 、 和设置时,您将添加以下行:pm.start_servers
pm.min_spare_servers
pm.max_spare_servers
<span class="pln">pm</span><span class="pun">.</span><span class="pln">start_servers </span><span class="pun">=</span> <span class="lit">10</span><span class="pln"> pm</span><span class="pun">.</span><span class="pln">min_spare_servers </span><span class="pun">=</span> <span class="lit">5</span><span class="pln"> pm</span><span class="pun">.</span><span class="pln">max_spare_servers </span><span class="pun">=</span> <span class="lit">20</span>
要调整 和 设置,您需要添加以下行:pm.max_requests
request_terminate_timeout
<span class="pln">pm</span><span class="pun">.</span><span class="pln">max_requests </span><span class="pun">=</span> <span class="lit">1000</span><span class="pln"> request_terminate_timeout </span><span class="pun">=</span> <span class="lit">60s</span>
对 PHP-FPM 设置进行任何更改后,应重新启动 PHP-FPM 服务以确保更改生效:
<span class="pln">sudo systemctl restart php7</span><span class="pun">.</span><span class="lit">4</span><span class="pun">-</span><span class="pln">fpm</span>
通过微调这些设置,您可以优化 PHP-FPM 服务的性能,并确保它可以处理站点上的预期流量负载。
监控 PHP-FPM 性能
一旦 PHP-FPM 启动并运行,您应该定期监控其性能,以确保它平稳高效地运行。可用于监视 PHP-FPM 性能的一些工具和技术包括:
- PHP-FPM 状态页:
PHP-FPM 有一个内置的状态页面,提供有关池、进程和性能指标状态的实时信息。要访问状态页,请将以下行添加到 PHP-FPM 池配置文件中:
<span class="pln">pm</span><span class="pun">.</span><span class="pln">status_path </span><span class="pun">=</span> <span class="pun">/</span><span class="pln">status ping</span><span class="pun">.</span><span class="pln">path </span><span class="pun">=</span> <span class="pun">/</span><span class="pln">ping</span>
添加后,您可以通过访问 URL 访问状态页面。该页面将显示有关 PHP-FPM 池的大量信息,包括活动和空闲进程的数量、处理的请求数量、平均请求时间等等。http://<your-IP-address>:<port>/status
- 系统监控工具:top、htop 和 ps 等系统监控工具可用于监控 PHP-FPM 进程和系统资源。这些工具提供有关 PHP-FPM 进程以及整个系统的 CPU、内存和 I/O 使用情况的实时信息。
- 日志文件:PHP-FPM 还会生成日志文件,其中包含有关错误、警告和其他事件的信息。通过分析这些日志文件,您可以识别和解决 PHP-FPM 性能问题。
- 性能测试:您还可以使用 Apache Bench 或 Siege 等性能测试工具来测试 PHP-FPM 在不同负载和场景下的性能。这些工具可以帮助您识别瓶颈并优化 PHP-FPM 配置以获得更好的性能。
通过定期监视 PHP-FPM 的性能,您可以确保您的 Web 应用程序平稳高效地运行,并在出现任何问题影响用户之前对其进行故障排除。
保护PHP-FPM和Nginx
虽然PHP-FPM和Nginx在默认情况下都是安全的,但您可以采取一些额外的步骤来进一步保护您的Web服务器并保护它免受攻击。保护PHP-FPM和Nginx的一些最佳实践是:
- 使用 HTTPS:始终使用 HTTPS 加密客户端和服务器之间的流量。HTTPS确保数据安全传输,不会被第三方拦截。要启用HTTPS,您需要在Web服务器上安装SSL / TLS证书,并配置Nginx以使用它。
- 启用防火墙:配置防火墙以限制对 Web 服务器的访问,并仅允许来自受信任源的流量。您可以使用 Ubuntu 22.04 附带的 UFW 防火墙为 Web 服务器配置防火墙规则。
- 禁用未使用的服务:禁用 Web 应用程序不需要的任何不必要的服务和模块。这减少了服务器的攻击面,并使攻击者更难找到漏洞。
- 使用强密码:始终为您的 Web 应用程序、PHP-FPM 和 Nginx 使用强密码。
- 使软件保持最新:定期更新PHP-FPM,Nginx和其他软件组件,以确保您的Web服务器免受已知漏洞和利用的侵害。使用 apt 或 yum 等包管理器来安装更新和安全补丁。
总之,PHP-FPM是在Web服务器上运行PHP应用程序的一种强大而灵活的方式。通过配置和微调 PHP-FPM 池和设置,您可以优化服务器的性能并确保 PHP 应用程序平稳运行。
我们已经介绍了在 Ubuntu 上配置 PHP-FPM 的基本步骤,包括安装、配置 Nginx、自定义 PHP-FPM 池、微调 PHP-FPM 设置、监控 PHP-FPM 性能以及保护 PHP-FPM 和 Nginx。我们希望本指南对您有所帮助,并且您对自己在 Ubuntu 服务器上配置和管理 PHP-FPM 的能力充满信心。
请记住,在生产环境中实施配置之前,请始终对其进行全面测试。此外,请及时了解最新的安全公告和最佳实践,以确保您的服务器和应用程序安全。