商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > ubuntu中php-fpm如何实现集群部署

ubuntu中php-fpm如何实现集群部署

  发布于2026-07-27 阅读(0)

扫一扫,手机访问

在Ubuntu中搭建PHP-FPM集群,其实并不复杂。关键在于合理配置多个实例,并让Nginx或Apache作为反向袋里,把请求分发到这些实例上。下面按步骤拆解,每一步都附带实际配置要点,照着做基本不会出错。

ubuntu中php-fpm如何实现集群部署

安装PHP-FPM

首先要确保系统已安装PHP和PHP-FPM。直接用apt安装即可:

sudo apt update
sudo apt install php-fpm

安装完成后,PHP-FPM会默认启动一个实例,但集群需要多个独立的实例,所以接下来要复制并修改配置文件。

配置PHP-FPM实例

默认的PHP-FPM池配置文件在 /etc/php/{version}/fpm/pool.d/www.conf,其中{version}是你的PHP版本号(比如7.4、8.1等)。我们需要为每个实例单独创建一个配置文件。先复制一份:

sudo cp /etc/php/{version}/fpm/pool.d/www.conf /etc/php/{version}/fpm/pool.d/www-cluster.conf
sudo nano /etc/php/{version}/fpm/pool.d/www-cluster.conf

在配置文件中,重点修改以下几个参数,让不同实例区分开来:

  • listen:每个实例必须监听不同的socket或端口,例如 unix:/run/php/php7.4-fpm-cluster.sock127.0.0.1:9001
  • pm:进程管理方式,可选 dynamicondemand,集群场景下通常用 dynamic 以保持一定数量的备用进程。
  • pm.max_childrenpm.start_serverspm.min_spare_serverspm.max_spare_servers:根据服务器内存和CPU核心数调整,避免资源耗尽。

复制出多个配置文件(比如 www-cluster2.confwww-cluster3.conf),分别修改其listen参数,就可以实现多个独立的PHP-FPM池。

启动多个PHP-FPM实例

每个配置文件对应一个独立的PHP-FPM进程。使用以下命令启动:

sudo php-fpm --nodaemonize --fpm-config /etc/php/{version}/fpm/pool.d/www-cluster.conf --pid /run/php/php{version}-cluster.pid

注意--nodaemonize参数让进程在前台运行,方便调试;生产环境建议去掉该参数,改用systemd管理。重复这条命令,每个实例指定不同的配置文件和PID文件路径即可。

如果需要开机自启,可以为每个实例编写systemd服务单元,或者直接使用@符号配合模板,不过这一步相对进阶,基础集群部署手动启动也完全可行。

配置Nginx或Apache的反向袋里

有了多个PHP-FPM实例之后,就需要一个前端Web服务器来分发请求。Nginx是目前最常用的方案,下面是一个典型的upstream配置:

http {
    upstream php_cluster {
        server unix:/run/php/php7.4-fpm-cluster.sock;
        server unix:/run/php/php7.4-fpm-cluster2.sock;
        # 添加更多实例
    }

    server {
        listen 80;
        server_name example.com;
        root /var/www/html;
        index index.php index.html index.htm;

        location ~ \.php$ {
            fastcgi_pass php_cluster;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    }
}

关键点在于upstream块中列出了所有PHP-FPM实例的socket或IP:端口,Nginx会按轮询(默认)或你指定的策略分发请求。如果使用Apache,则通过mod_proxy_fcgi配合ProxyPassMatch实现类似效果。

测试配置

配置完成后,重新加载Nginx:

sudo systemctl reload nginx

或者Apache:

sudo systemctl reload apache2

然后访问你的网站或测试页面,检查PHP请求是否被正确分发到各个PHP-FPM实例。可以通过查看每个实例的进程日志或使用strace来确认。如果一切正常,恭喜你,集群部署已经完成。

最后提醒一句:实际生产环境中,需要根据服务器资源、并发量以及业务场景调整pm参数,并考虑使用负载均衡器(如HAProxy)或更高级的调度策略。另外,多个实例共享同一套代码,务必确保文件权限和session存储等一致,否则会出现数据错乱。

本文转载于:https://www.yisu.com/ask/16142001.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注