首页主机资讯ThinkPHP在Linux如何负载均衡

ThinkPHP在Linux如何负载均衡

时间2025-12-04 23:52:03发布访客分类主机资讯浏览808
导读:Linux下为 ThinkPHP 搭建负载均衡 一、架构与前置准备 组件分工:前端用Nginx/HAProxy/LVS做负载均衡,后端多台服务器运行PHP-FPM + ThinkPHP(建议相同代码与配置,代码通过Git或Rsync同步)...

Linux下为 ThinkPHP 搭建负载均衡

一、架构与前置准备

  • 组件分工:前端用Nginx/HAProxy/LVS做负载均衡,后端多台服务器运行PHP-FPM + ThinkPHP(建议相同代码与配置,代码通过GitRsync同步)。
  • 会话与缓存:有登录态/验证码等会话需求时,使用Redis集中存储 Session,避免单机粘滞导致“登录态丢失”。
  • 文件与上传:用户上传文件建议放到对象存储NFS/共享盘,避免不同后端节点文件不一致。
  • 健康检查与高可用:为负载均衡器配置健康检查故障摘除;生产环境可加一层Keepalived VIP实现主备切换,消除单点。
  • 域名与证书:统一用域名对外服务,证书在负载均衡器或入口网关终止(TLS offload),后端走HTTP即可。

二、方案一 Nginx 反向代理负载均衡(最常用)

  • 安装与启动
    • Ubuntu/Debian:sudo apt update & & sudo apt install nginx & & sudo systemctl start nginx
    • CentOS/RHEL/Fedora:sudo yum install -y epel-release & & sudo yum install -y nginx & & sudo systemctl start nginx
  • 负载均衡配置示例(/etc/nginx/conf.d/lb.conf)
    • 定义后端与算法;开启长连接与常用代理头;将 PHP 请求转发到各节点的 PHP-FPM(示例为本地 9000 端口,远程改为内网地址)。
    • 注意:ThinkPHP 需隐藏 index.php,建议开启pathinfo路由兼容
    upstream tp_backend {
        
        least_conn;
                         # 或 ip_hash;
         或权重 weight=
        server 10.0.0.11:80 max_fails=3 fail_timeout=30s;
        
        server 10.0.0.12:80 max_fails=3 fail_timeout=30s;
        
        keepalive 32;
    
    }
    
    
    server {
        
        listen 80;
        
        server_name api.example.com;
    
    
        # 静态资源直接命中
        location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        
            root /var/www/your_tp/public;
        
            expires 1y;
        
            add_header Cache-Control "public, immutable";
    
        }
    
    
        # 反向代理到后端 ThinkPHP
        location / {
        
            proxy_pass         http://tp_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_set_header   X-Request-ID        $request_id;
        
            proxy_read_timeout 60s;
        
            proxy_send_timeout 60s;
    
        }
    
    
        # 将 PHP 请求转发到后端 PHP-FPM(示例为本地 9000;远程改为 10.0.0.x:9000)
        location ~ \.php$ {
        
            include         fastcgi_params;
        
            fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        
            fastcgi_param   PATH_INFO        $fastcgi_path_info if_not_empty;
        
            fastcgi_pass    127.0.0.1:9000;
           # 远程:10.0.0.11:9000;
         10.0.0.12:9000;
        
            fastcgi_index   index.php;
    
        }
    
    }
    
    
  • 后端节点 Nginx 最小配置要点(每个后端)
    server {
        
        listen 80;
        
        root  /var/www/your_tp/public;
        
        index index.php index.html;
    
    
        # 隐藏 index.php(PATH_INFO 推荐)
        location / {
        
            try_files $uri $uri/ /index.php?$query_string;
    
        }
        
    
        # 或兼容旧项目:try_files $uri $uri/ /index.php/$uri;
    
    
        location ~ \.php$ {
        
            include         fastcgi_params;
        
            fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        
            fastcgi_param   PATH_INFO        $fastcgi_path_info if_not_empty;
        
            fastcgi_pass    127.0.0.1:9000;
        
            fastcgi_index   index.php;
    
        }
    
    }
        
    
  • 检查与生效
    • 语法检查:sudo nginx -t
    • 热加载:sudo systemctl reload nginx
  • 说明
    • 使用least_connip_hash可在无共享 Session 时缓解登录态漂移;更优方案是使用Redis 集中 Session
    • 若需四层转发(TCP/UDP),Nginx 需启用stream 模块

三、其他负载均衡器选项

  • HAProxy
    • 适合做七层 HTTP/TCP负载均衡与细粒度 ACL 控制,配置 frontend/backend,支持HTTP 健康检查与指标导出,易与 Keepalived 组合实现高可用。
  • LVS
    • 内核级四层负载均衡,性能更高,适合超大规模;常见模式有NAT/DR/TUN,通常与Keepalived配合做 VIP 漂移与故障转移。

四、ThinkPHP 与部署要点

  • 会话与缓存
    • 开启Redis Session:在配置中设置 session.type=redis,统一连接 Redis;验证码、队列等也建议走 Redis,避免节点间不一致。
  • 静态资源与上传
    • 静态资源由负载均衡器或 CDN 命中;上传目录使用共享存储(对象存储/NFS),防止不同后端文件不一致。
  • 路由与兼容
    • 推荐开启路由到 index.php 的 PATH_INFO模式,隐藏入口;如历史项目使用“/index.php/控制器/方法”,需保留兼容规则。
  • 健康检查与摘除
    • 负载均衡器对后端配置HTTP 健康检查(如 /health 或返回 200 的静态页),自动摘除异常节点;结合max_fails/fail_timeout提升稳定性。
  • 压测与验证
    • 使用Apache Bench进行压测并观察各节点 access.log,确认请求已分发且无明显错误率:
      • ab -n 10000 -c 100 http://api.example.com/

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


若转载请注明出处: ThinkPHP在Linux如何负载均衡
本文地址: https://pptw.com/jishu/764104.html
Linux中ThinkPHP如何部署集群 ThinkPHP Linux日志怎么查看

游客 回复需填写必要信息