Miklix

如何在 NGINX 中设置单独的 PHP-FPM 池

已出版: 2025年2月15日 UTC 11:53:14
最后更新 2026年1月12日 UTC 08:30:09

在本文中,我将介绍运行多个 PHP-FPM 池并通过 FastCGI 将 NGINX 连接到它们所需的配置步骤,从而实现虚拟主机之间的进程分离和隔离。


为了使尽可能多的人能够访问本页面,本页面由英文机译而成。遗憾的是,机器翻译技术尚不完善,因此可能会出现错误。如果您愿意,可以在此处查看原始英文版本:

How to Set Up Separate PHP-FPM Pools in NGINX

本文信息基于运行在 Ubuntu Server 14.04 x64 上的 NGINX 1.4.6 和 PHP-FPM 5.5.9。对于其他版本,其有效性可能存在差异。(更新:经确认,在 Ubuntu Server 24.04、PHP-FPM 8.3 和 NGINX 1.24.0 上,本文所有步骤仍然有效。)

与将所有进程运行在同一个进程池中相比,设置多个 PHP-FPM 子进程池有很多优势。安全性、隔离性和资源管理是其中几个主要优势。

无论你的动机是什么,这篇文章都会对你有所帮助 :-)

第一部分 – 设置新的 PHP-FPM 池

首先,你需要找到 PHP-FPM 存储连接池配置的目录。在 Ubuntu 14.04 上,默认情况下是 /etc/php5/fpm/pool.d。该目录下可能已经存在一个名为 www.conf 的文件,其中包含默认连接池的配置。如果你之前没有查看过该文件,建议你仔细阅读并根据你的服务器配置进行调整,因为默认设置是针对性能较低的服务器的。但现在,只需复制一份即可,这样我们就不用从头开始了。

sudo cp www.conf mypool.conf

当然,你可以把“mypool”替换成你想给泳池起的任何名字。

现在用 nano 或其他你喜欢的文本编辑器打开新文件,并根据你的需求进行调整。你可能需要调整子进程数,以及进程池运行的用户和用户组,但有两个设置你必须更改:进程池的名称和它监听的套接字,否则它会与现有进程池冲突,导致程序停止运行。

连接池的名称位于文件顶部附近,用方括号括起来。默认值为 [www]。您可以根据需要更改它;我建议使用与配置文件相同的名称,因此在本示例中,请将其更改为 [mypool]。如果您不更改它,PHP-FPM 似乎只会加载第一个具有该名称的配置文件,这很可能会导致问题。

接下来,您需要更改正在监听的套接字或地址,这由 listen 指令定义。默认情况下,PHP-FPM 使用 Unix 套接字,因此您的 listen 指令可能如下所示:

listen = /var/run/php5-fpm.sock

您可以将其更改为任何有效的名称,但我建议您使用与配置文件名类似的名称,例如您可以将其设置为:

listen = /var/run/php5-fpm-mypool.sock

好的,保存文件并退出文本编辑器。

第二部分 – 更新 NGINX 虚拟主机配置

现在,你需要打开 NGINX 虚拟主机文件,其中包含你想要更改为新池的 FastCGI 配置——或者更确切地说,连接到新的套接字。

在 Ubuntu 14.04 中,这些配置默认存储在 /etc/nginx/sites-available 目录下,但也可以定义在其他位置。您可能最清楚您的虚拟主机配置在哪里 ;-)

用你喜欢的文本编辑器打开相关的配置文件,找到定义 PHP-FPM 套接字的 fastcgi_pass 指令(必须位于 location 上下文中)。你需要修改这个值,使其与你在第一步中创建的新 PHP-FPM 连接池配置相匹配。继续我们的示例,你需要将其修改为:

fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;

然后保存并关闭该文件。你现在就快完成了。

第三部分 – 重启 PHP-FPM 和 NGINX

要应用您所做的配置更改,请重启 PHP-FPM 和 NGINX。虽然重新加载可能就足够了,但我发现这并不总是有效,具体取决于您更改了哪些设置。就我而言,我希望旧的 PHP-FPM 子进程立即终止,因此需要重启 PHP-FPM,但对于 NGINX 来说,重新加载可能就足够了。您可以自己尝试一下。

sudo service php5-fpm restart
sudo service nginx restart

好了,大功告成。如果一切操作正确,您修改的虚拟主机现在应该正在使用新的 PHP-FPM 进程池,并且不会与其他虚拟主机共享子进程。

分享至 Bluesky在 Facebook 上分享在 LinkedIn 上分享在 Tumblr 上分享分享至 X在 LinkedIn 上分享在Pinterest上固定

Mikkel Christensen

关于作者

Mikkel Christensen
迈克尔 是 miklix.com 的创建者和所有者。他拥有 20 多年的专业计算机程序员/软件开发人员经验,目前全职受雇于一家大型欧洲 IT 公司。不写博客时,他把业余时间花在各种兴趣、爱好和活动上,这在一定程度上反映在本网站涵盖的各种主题上。