2013-11-15 36 views
0

我正在使用nginx/php-fpm在三个应用程序服务器节点的前端中设置一个keepalived HAProxy平衡器中的http流量。所以,我的服务链将是:nginx/php-fpm农场的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中不需要使用会话亲和性,但我担心在在这种情况下,用户可能在每个请求中跳过每台服务器。

回答

0

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

option httpchk OPTIONS/

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

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

相关问题