在 Linux 上实现 PHP 负载均衡的实用方案
一、常见架构与适用场景
二、方案一 Nginx 作为反向代理与负载均衡
http {
upstream php_backend {
server 192.168.1.11:9000 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.1.12:9000 weight=1 max_fails=3 fail_timeout=30s;
# 也可使用 Unix socket:server unix:/run/php/php7.x-fpm.sock;
}
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_pass php_backend; # 指向 upstream 名称
}
}
}
三、方案二 HAProxy 作为负载均衡器
global
log /dev/log local0
log /dev/log local1 notice
daemon
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
server php1 192.168.1.11:9000 check
server php2 192.168.1.12:9000 check
# 支持 Unix socket:server php1 unix:/run/php/php7.x-fpm.sock check
四、方案三 单机多实例与容器化实践
version: '3'
services:
app:
build: .
expose:
- "9000"
lb:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./lb.conf:/etc/nginx/conf.d/default.conf
lb.conf 中使用 upstream 指向多个 app:9000 实例即可。五、关键注意事项与优化