首页主机资讯Linux服务器上ThinkPHP如何进行负载均衡

Linux服务器上ThinkPHP如何进行负载均衡

时间2025-11-25 02:41:03发布访客分类主机资讯浏览1393
导读:Linux服务器上 ThinkPHP 负载均衡实战 一 架构与前置准备 组件与拓扑:使用 Nginx 作为反向代理与负载均衡器,后端多台 PHP-FPM(或 Swoole)运行 ThinkPHP 6/5,静态资源由 Nginx 直接服务。...

Linux服务器上 ThinkPHP 负载均衡实战

一 架构与前置准备

  • 组件与拓扑:使用 Nginx 作为反向代理与负载均衡器,后端多台 PHP-FPM(或 Swoole)运行 ThinkPHP 6/5,静态资源由 Nginx 直接服务。
  • 一致性要求:多实例间需统一 Session缓存上传文件日志,避免状态粘滞与数据不一致。
  • 基础检查:各实例代码版本一致、目录权限一致、时区与依赖一致;数据库与应用配置(如域名、密钥)一致。

二 方案一 Nginx 反向代理 + PHP-FPM 多实例

  • 后端 PHP-FPM 实例示例(两台):
    • 实例A:192.168.1.11:9000
    • 实例B:192.168.1.12:9000
  • 负载均衡 Nginx 配置示例(/etc/nginx/conf.d/loadbalance.conf):
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;
    
    # 如需会话保持(不建议长期依赖,优先用Redis共享Session)
    # ip_hash;

}


server {
    
    listen 80;
    
    server_name example.com;
    
    root  /var/wwwphp/public;
       # 各实例的 public 目录
    index index.php index.html;


    # URL重写,适配 ThinkPHP 路由
    location / {
    
        try_files $uri $uri/ /index.php?$query_string;

    }


    # PHP 处理
    location ~ \.php$ {
    
        include        fastcgi_params;
    
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    
        fastcgi_param  HTTP_HOST        $host;
    
        fastcgi_pass   php_backend;
     # 反向代理到 upstream
    }


    # 静态资源缓存(示例)
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
    
        expires 1y;
    
        add_header Cache-Control "public, immutable";

    }


    # 隐藏敏感文件
    location ~ /\.ht {
    
        deny all;

    }

}

  • 生效与验证:
    • 检查配置:sudo nginx -t
    • 重载 Nginx:sudo systemctl reload nginx
    • 简单压测:ab -n 10000 -c 100 http://example.com/
    • 在各后端查看访问日志,确认请求被分发到不同实例。

三 方案二 Swoole 常驻进程 + Nginx 负载均衡

  • 适用场景:需要长连接、协程、更高并发的 API/WebSocket 服务。
  • 后端 Swoole 实例示例:
    • 实例A:192.168.1.21:9501
    • 实例B:192.168.1.22:9501
  • Nginx 配置示例(/etc/nginx/conf.d/swoole_lb.conf):
upstream swoole_backend {
    
    server 192.168.1.21:9501 weight=1 max_fails=3 fail_timeout=30s;
    
    server 192.168.1.22:9501 weight=1 max_fails=3 fail_timeout=30s;
    
    # 如需会话粘滞(不建议长期依赖)
    # ip_hash;

}


server {
    
    listen 80;
    
    server_name api.example.com;


    location / {
    
        proxy_pass http://swoole_backend;
    
        proxy_http_version 1.1;
    
        proxy_set_header Host $host;
    
        proxy_set_header X-Real-IP $remote_addr;
    
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
        proxy_set_header X-Forwarded-Proto $scheme;
    
        proxy_read_timeout 120s;
   # Swoole 长连接可适当增大
    }

}
    
  • 生效与验证:
    • 检查与重载:sudo nginx -t & & sudo systemctl reload nginx
    • 压测:ab -n 10000 -c 100 http://api.example.com/
    • 多实例返回差异化标识(如在控制器中输出服务器IP),验证分发效果。

四 分布式一致性关键配置

  • Session 共享:将 Session 存入 Redis/Memcached,各实例统一连接配置,避免单机内存 Session 导致登录态不一致。
  • 缓存共享:使用 Redis 作为统一缓存后端,避免命中率与数据不一致问题。
  • 文件上传:将用户上传文件放到对象存储(如 七牛云 OSS)或分布式文件系统,代码中通过 think\filesystem 使用对应驱动。
  • 日志集中:多实例日志写入 ELK/EFK 或云日志服务,便于检索与排错。

五 健康检查与运维建议

  • 健康检查与容错:在 upstream 中使用 max_fails/fail_timeoutweight 控制故障摘除与权重分配;必要时配合主动健康检查脚本。
  • 会话保持策略:仅在短期内无法改造为共享 Session 时临时使用 ip_hash;长期方案优先 Redis 共享。
  • 静态资源:由 Nginx 直接服务并设置长期缓存,减轻后端压力。
  • 压测与观测:上线前用 ab/wrk 压测,观察 QPS、P95/P99、错误率、各实例负载;上线后持续监控与告警。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Linux服务器上ThinkPHP如何进行负载均衡
本文地址: https://pptw.com/jishu/755192.html
Debian Sniffer在教育领域有何用途 Linux环境下ThinkPHP如何进行版本控制

游客 回复需填写必要信息