Linux上实现PHP负载均衡的实用方案
一、架构与总体思路
二、方案一 Nginx反向代理 + 多实例PHP‑FPM(推荐)
http {
upstream php_fpm {
least_conn;
server unix:/run/php/php7.4-fpm1.sock max_fails=3 fail_timeout=30s;
server unix:/run/php/php7.4-fpm2.sock max_fails=3 fail_timeout=30s;
}
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php_fpm;
}
}
}
[www1]
user = www-data
group = www-data
listen = /run/php/php7.4-fpm1.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 15
三、方案二 HAProxy 负载均衡 + PHP‑FPM
global
log /dev/log local0
log /dev/log local1 notice
daemon
maxconn 4096
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http_front
bind *:80
default_backend php_back
backend php_back
balance roundrobin
option httpchk GET /health
http-check expect status 200
server php1 unix:/run/php/php7.4-fpm1.sock check inter 5s fall 3 rise 2
server php2 unix:/run/php/php7.4-fpm2.sock check inter 5s fall 3 rise 2
listen stats
bind *:8404
stats enable
stats uri /haproxy?stats
stats refresh 10s
上述配置支持主动健康检查与统计页面,便于快速定位异常与观察分发情况。四、高可用、验证与优化要点