温馨提示×

ubuntu php如何做负载均衡

小樊
35
2026-09-10 08:56:17
栏目: 云计算

在 Ubuntu 上用 PHP 做“负载均衡”,通常不是 PHP 本身来做负载均衡,而是**用 Nginx / Apache + 多台 PHP 服务(PHP-FPM)**来实现。下面按常见场景给你一个清晰方案。


一、常见架构(推荐)

用户请求
   ↓
Nginx(负载均衡)
   ↓
PHP-FPM 1 (127.0.0.1:9001)
PHP-FPM 2 (127.0.0.1:9002)
PHP-FPM 3 (另一台服务器)

PHP 只负责执行业务逻辑,负载均衡由 Nginx 完成。


二、单机多 PHP-FPM 负载(入门)

1. 安装基础环境

sudo apt update
sudo apt install nginx php-fpm

查看 PHP 版本:

php -v
# 例如 php8.2-fpm

2. 配置多个 PHP-FPM 池(端口方式)

编辑:

sudo cp /etc/php/8.2/fpm/pool.d/www.conf /etc/php/8.2/fpm/pool.d/www2.conf
sudo nano /etc/php/8.2/fpm/pool.d/www2.conf

修改:

[www2]
listen = 127.0.0.1:9002
user = www-data
group = www-data

重启:

sudo systemctl restart php8.2-fpm

3. Nginx 负载均衡配置

upstream php_backend {
    server 127.0.0.1:9001;
    server 127.0.0.1:9002;
}

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

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass php_backend;
    }
}
sudo nginx -t
sudo systemctl reload nginx

三、多台服务器负载均衡(生产常用)

架构

Nginx LB
 ├── web1 (PHP-FPM)
 ├── web2 (PHP-FPM)
 └── web3 (PHP-FPM)

Nginx 配置

upstream php_cluster {
    server 192.168.1.11:9000;
    server 192.168.1.12:9000;
    server 192.168.1.13:9000;
}

server {
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass php_cluster;
    }
}

⚠️ 注意:

  • PHP-FPM 要监听 0.0.0.0 或内网 IP
  • 防火墙只开放内网访问

四、负载均衡策略

upstream php_backend {
    least_conn;        # 最少连接
    # ip_hash;         # 会话保持
    server 127.0.0.1:9001;
    server 127.0.0.1:9002;
}

常用:

  • round_robin(默认)
  • least_conn
  • ip_hash(登录态)

五、会话问题(非常重要)

PHP 负载均衡后:

  • Session 不能只存本地文件
  • 推荐:
    • Redis
    • 数据库

Redis Session 示例

session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"

六、PHP 本身能做负载均衡吗?

❌ 不推荐
PHP 是请求级语言,不适合做反向代理。

✅ 正确做法:

  • Nginx / HAProxy 做负载
  • PHP 只做业务

七、简单总结

✅ Ubuntu + PHP 负载均衡标准方案:

  • Nginx 做负载
  • PHP-FPM 多实例
  • Session 用 Redis
  • 静态资源分离

如果你愿意,我可以:

  • 给你 Docker 版
  • 给你 HAProxy 方案
  • 按你的 Laravel / ThinkPHP 场景配置

你现在是本地测试还是线上服务器?

0