繁体   English   中英

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

[英]Stickness of sessions on a HAproxy balancer of nginx/php-fpm farm

我正在使用nginx/php-fpm在三个appserver节点的前端中设置一个HTTP通信的keepalived HAProxy平衡器。 因此,我的服务链将是:

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

好吧,问题在于,将haproxy设置为使用cookie来确保会话亲和性时,无法看到我的后端服务器。

这是我的haproxy.conf文件:

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

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

另一方面,我计划将redis db用作会话存储,我想如果我选择此选项,则不需要在haproxy中使用会话亲和力,但是我担心在这种情况下,用户可能在每个请求中都在每个服务器上跳转。

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

option httpchk OPTIONS /

这就是所有问题,现在正在发挥作用!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM