在HAproxy平衡器或nginx / php-fpm服务器场上的会话粘性

时间:2013-11-15 06:47:46

标签: session nginx php haproxy

我正在使用HAProxy在三个appserver节点的前端设置一个keepalived nginx/php-fpm http流量平衡器。所以我的服务链是:

   -----> HAProxy -----> nginx -----> php-FPM ----> webapp 

嗯,问题是当haproxy设置为使用cookie来确保会话亲和力时,global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy user haproxy group haproxy daemon defaults log global mode http option httplog option dontlognull contimeout 5000 clitimeout 50000 srvtimeout 50000 frontend http-in bind *:80 default_backend servers backend servers option httpchk OPTIONS / option forwardfor option http-server-close balance roundrobin cookie PHPSESSID prefix indirect nocache stats enable stats refresh 10s stats hide-version stats scope . stats uri /lb?stats stats auth admin:admin2013 server nodo1 10.10.200.19:80 check cookie nodo1 server nodo2 10.10.200.20:80 check cookie nodo2 server nodo3 10.10.200.21:80 check cookie nodo3 无法看到我的后端服务器。

这是我的haproxy.conf文件:

{{1}}

任何人都知道为什么会这样吗?我已经检查了我的php.ini文件,并且session.name变量具有正确的值(在这种情况下为PHPSESSID)。

另一方面,我计划使用redis db作为会话存储,我想如果我选择这个,就没有必要在haproxy中使用会话亲和性,但是我担心这个例如,用户可能在每个请求中跳过每个服务器。

1 个答案:

答案 0 :(得分:0)

最后我发现了错误,我不得不删除该行:

option httpchk OPTIONS /

这就是问题所在,现在的工作就像一个魅力!

现在我将继续连接redis,以确保最终节点崩溃时用户的会话不会丢失。