linux

Linux PHP-FPM如何进行负载均衡

小樊
39
2025-12-24 03:37:53
栏目: 云计算

Linux PHP-FPM负载均衡实战指南

一、架构选型与总体思路

二、方案一 Nginx upstream 直接负载均衡到多个 PHP-FPM

http {
  upstream php_backend {
    # 方式A:Unix socket(同机多实例)
    server unix:/run/php/php7.4-fpm-1.sock;
    server unix:/run/php/php7.4-fpm-2.sock;

    # 方式B:TCP 端口(跨机或同机多实例)
    # server 10.0.0.11:9000 weight=1 max_fails=3 fail_timeout=30s;
    # server 10.0.0.12:9000 weight=1 max_fails=3 fail_timeout=30s;

    # 负载均衡策略(按需选择其一)
    # least_conn;   # 最少连接
    # ip_hash;      # 会话保持(基于客户端IP)
    # 默认轮询
  }

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

    location / {
      try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_index index.php;
      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
  # Unix socket 示例(需 HAProxy 支持 Unix socket,部分版本/编译选项支持)
  # server php1 unix@/run/php/php7.4-fpm-1.sock check
  # server php2 unix@/run/php/php7.4-fpm-2.sock check

  # TCP 示例(更通用)
  server php1 10.0.0.11:9000 check
  server php2 10.0.0.12:9000 check

四、方案三 单机多实例 PHP-FPM 配置要点

; www1.conf
[www1]
user = www-data
group = www-data
listen = /run/php/php7.4-fpm-1.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10

; www2.conf
[www2]
user = www-data
group = www-data
listen = /run/php/php7.4-fpm-2.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
# 复制服务或自定义单元后,分别启动
systemctl start php7.4-fpm@www1
systemctl start php7.4-fpm@www2
# 或指定配置文件启动
php-fpm -y /etc/php/7.4/fpm/pool.d/www1.conf
php-fpm -y /etc/php/7.4/fpm/pool.d/www2.conf

五、验证、调优与排错

0
看了该问题的人还看了