nginx/php-fpm 农场的 HAproxy 平衡器上的会话粘性



我正在三个具有nginx/php-fpm的应用程序服务器节点的前端设置一个 http 流量的 keepalive 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 数据库作为会话存储,我认为如果我选择这个,就没有必要在 haproxy 中使用会话亲和性,但我担心在这种情况下,用户可能会在每个请求中跳转到每台服务器。

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

option httpchk OPTIONS /

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

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

最新更新