需部署nginx反向代理与负载均衡、keepalived高可用、redis集中存储session及可选haproxy或nginx+lua动态调度,实现php网站多服务器集群的流量分发、故障自动转移与会话一致性。

如果您正在部署PHP网站并希望提升其可用性与处理能力,需借助Nginx将HTTP请求分发至多个PHP后端服务器,同时确保单点故障不中断服务。以下是实现多服务器集群负载均衡与故障转移的具体方法:
一、使用Nginx upstream配置多节点反向代理与健康检查
该方法通过Nginx内置upstream模块定义后端PHP服务器池,并启用自动健康检测机制,在某节点失效时自动剔除,避免请求转发失败。Nginx支持max_fails和fail_timeout参数组合实现毫秒级故障识别与恢复判定。
1、编辑Nginx主配置文件(如/etc/nginx/nginx.conf或/etc/nginx/conf.d/loadbalancer.conf),在http块内添加upstream定义:
2、配置如下内容:
upstream php_cluster {
server 192.168.1.10:9000 weight=3 max_fails=3 fail_timeout=30s;
server 192.168.1.11:9000 weight=2 max_fails=3 fail_timeout=30s;
server 192.168.1.12:9000 backup;
}
3、在server块中配置location,使用fastcgi_pass指向该upstream:
location ~ \.php$ {
fastcgi_pass php_cluster;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
4、执行nginx -t验证语法,无误后运行nginx -s reload重载配置。
二、启用Keepalived实现Nginx负载均衡器高可用
当Nginx自身成为单点瓶颈或故障源时,需部署双机热备架构。Keepalived通过VRRP协议在两台Nginx服务器间虚拟浮动IP,主节点宕机后VIP秒级漂移至备节点,保障前端入口持续可用。
1、在两台Nginx服务器上均安装Keepalived:yum install -y keepalived(CentOS)或apt install -y keepalived(Ubuntu)。
2、主节点(优先级设为100)配置/etc/keepalived/keepalived.conf:
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24
}
}
3、备节点(优先级设为90)配置相同,仅修改state BACKUP与priority 90。
4、启动服务:systemctl enable keepalived && systemctl start keepalived。
三、基于Redis集中存储Session实现跨服务器会话一致性
默认PHP session以文件方式存储于本地,多服务器环境下用户请求被轮询分发会导致登录态丢失。改用Redis作为统一session后端,所有PHP实例读写同一内存数据库,彻底消除会话分裂问题。
1、在各PHP服务器上安装Redis扩展:pecl install redis,并在php.ini中启用:
extension=redis.so
2、修改session配置项:
session.save_handler = redis
session.save_path = "192.168.1.20:6379" (指向独立Redis主节点或哨兵集群地址)
session.cookie_httponly = 1
3、重启PHP-FPM服务使配置生效:systemctl restart php-fpm。
四、采用HAProxy替代Nginx承担TCP层负载与更精细健康探测
当PHP后端暴露非HTTP协议接口(如自定义TCP服务)或需更严格的健康检查逻辑(如HTTP状态码+响应体关键字双重校验)时,HAProxy比Nginx更适合作为四层/七层混合负载均衡器,支持基于脚本的自定义check机制。
1、安装HAProxy:yum install -y haproxy(CentOS)或apt install -y haproxy(Ubuntu)。
2、编辑/etc/haproxy/haproxy.cfg,定义backend并启用高级健康检查:
backend php_servers
balance roundrobin
option httpchk GET /health.php
http-check expect status 200
server node1 192.168.1.10:9000 check inter 3000 rise 2 fall 3
server node2 192.168.1.11:9000 check inter 3000 rise 2 fall 3
3、启用HAProxy管理界面(可选),在global段添加:
stats uri /haproxy?stats
stats auth admin:password
4、启动服务:systemctl enable haproxy && systemctl start haproxy。
五、配置Nginx + Lua实现动态权重调整与请求染色调试
在灰度发布或A/B测试场景下,需根据请求头(如特定User-Agent或Cookie)将流量导向指定后端节点。Nginx配合lua-nginx-module可实现运行时策略决策,无需重启即可变更分发逻辑,同时支持在响应头注入节点标识用于链路追踪。
1、确认Nginx已编译含lua模块:nginx -V 2>&1 | grep -o with-http-lua-module。
2、在upstream外定义Lua共享字典用于权重缓存:
lua_shared_dict backend_weights 10m;
3、在location中嵌入Lua代码,依据请求特征选择server:
set_by_lua_block $target_server {
local cookie = ngx.var.cookie_target_node
if cookie == "node1" then
return "192.168.1.10:9000"
elseif cookie == "node2" then
return "192.168.1.11:9000"
else
return "192.168.1.12:9000"
end
}
4、在proxy_pass中引用变量:proxy_pass http://$target_server;。
5、添加响应头标识实际处理节点:add_header X-Processed-By $target_server;。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











