ThinkPHP在Linux如何负载均衡
导读:Linux下为 ThinkPHP 搭建负载均衡 一、架构与前置准备 组件分工:前端用Nginx/HAProxy/LVS做负载均衡,后端多台服务器运行PHP-FPM + ThinkPHP(建议相同代码与配置,代码通过Git或Rsync同步)...
Linux下为 ThinkPHP 搭建负载均衡
一、架构与前置准备
- 组件分工:前端用Nginx/HAProxy/LVS做负载均衡,后端多台服务器运行PHP-FPM + ThinkPHP(建议相同代码与配置,代码通过Git或Rsync同步)。
- 会话与缓存:有登录态/验证码等会话需求时,使用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_conn或ip_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/
- 使用Apache Bench进行压测并观察各节点 access.log,确认请求已分发且无明显错误率:
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: ThinkPHP在Linux如何负载均衡
本文地址: https://pptw.com/jishu/764104.html
