Miklix

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

已出版: 2025年2月15日 UTC 11:53:14

在本文中,我介绍了运行多个 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 子进程池而不是在同一个池中运行所有进程有许多优势。其中最主要的优势有安全性、分离/隔离和资源管理。

无论你的动机是什么,这篇文章都会帮助你实现它:-)


第 1 部分 - 设置新的 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

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


第 2 部分 - 更新 NGINX 虚拟主机配置

现在,您需要打开 NGINX 虚拟主机文件,并将您想要更改为新池的 FastCGI 配置更改为新池 - 或者更确切地说,连接到新的套接字。

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

在您最喜欢的文本编辑器中打开相关配置文件,然后查找定义 PHP-FPM 套接字的fastcgi_pass指令(必须在位置上下文中)。您必须更改此值,使其与您在第一步下创建的新 PHP-FPM 池配置相匹配,因此继续我们的示例,您需要将其更改为:

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

然后保存并关闭该文件。现在您几乎已经完成了。


第 3 部分 - 重新启动 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上固定

米克尔·邦·克里斯滕森

关于作者

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