在 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 完成。
sudo apt update
sudo apt install nginx php-fpm
查看 PHP 版本:
php -v
# 例如 php8.2-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
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)
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;
}
}
⚠️ 注意:
0.0.0.0 或内网 IPupstream php_backend {
least_conn; # 最少连接
# ip_hash; # 会话保持
server 127.0.0.1:9001;
server 127.0.0.1:9002;
}
常用:
round_robin(默认)least_connip_hash(登录态)PHP 负载均衡后:
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"
❌ 不推荐
PHP 是请求级语言,不适合做反向代理。
✅ 正确做法:
✅ Ubuntu + PHP 负载均衡标准方案:
如果你愿意,我可以:
你现在是本地测试还是线上服务器?