admin 管理员组

文章数量: 1086019


2024年4月29日发(作者:php数据库搭建)

最近部署基于nginx反向代理实现负载均衡的项目,发现新的nginx已经支持基于

cookie的负载均衡和健康检查,功能上已经非常强大,感觉不逊于haproxy。我在实际

环境的中使用的是taobao的Tengine,下面的内容主要来之Tengine官方文档。

该模块是一个负载均衡模块,通过cookie实现客户端与后端服务器的会话保持,在一

定条件下可以保证同一个客户端访问的都是同一个后端服务器。

Example1

#默认配置:cookie=routemode=insertfallback=on

upstreamfoo{

server192.168.0.1;

server192.168.0.2;

session_sticky;

}

server{

location/{

proxy_passfoo;

}

}

Example2

#insert+indirect模式:

upstreamtest{

session_stickycookie=uiddomain=lback=onpath=/mode=ins

ertoption=indirect;

server127.0.0.1:8080;

}

server{

location/{

#在insert+indirect模式或者prefix模式下需要配置session_sticky_hide_cookie

#这种模式不会将保持会话使用的cookie传给后端服务,让保持会话的cookie对后

端透明

session_sticky_hide_cookieupstream=test;

proxy_passtest;

}

}

指令

语法:

session_sticky[cookie=name][domain=your_domain][path=your_path][maxage=t

ime][mode=insert|rewrite|prefix][option=indirect][maxidle=time][maxlife=time][f

allback=on|off][hash=plain|md5]

默认值:session_stickycookie=routemode=insertfallback=on

上下文:upstream

说明:

本指令可以打开会话保持的功能,下面是具体的参数:

• cookie设置用来记录会话的cookie名称

• domain设置cookie作用的域名,默认不设置

• path设置cookie作用的URL路径,默认不设置

• maxage设置cookie的生存期,默认不设置,即为sessioncookie,浏览器关闭

即失效

• mode设置cookie的模式:

– insert:在回复中本模块通过Set-Cookie头直接插入相应名称的cookie。

– prefix:不会生成新的cookie,但会在响应的cookie值前面加上特定的前缀,当浏

览器带着这个有特定标识的cookie再次请求时,模块在传给后端服务前先删除加入的前

缀,后端服务拿到的还是原来的cookie值,这些动作对后端透明。如:

"Cookie:NAME=SRV~VALUE"。

– rewrite:使用服务端标识覆盖后端设置的用于sessionsticky的cookie。如果后端

服务在响应头中没有设置该cookie,则认为该请求不需要进行sessionsticky,使用这种

模式,后端服务可以控制哪些请求需要sesstionsticky,哪些请求不需要。

• option设置用于sessionsticky的cookie的选项,可设置成indirect或direct。

indirect不会将sessionsticky的cookie传送给后端服务,该cookie对后端应用完全透

明。direct则与indirect相反。

• maxidle设置sessioncookie的最长空闲的超时时间

• maxlife设置sessioncookie的最长生存期

• fallback设置是否重试其他机器,当sticky的后端机器挂了以后,是否需要尝试其

他机器

• hash设置cookie中server标识是用明文还是使用md5值,默认使用md5

语法:session_sticky_hide_cookieupstream=name;

默认值:none

上下文:server,location

说明:

配合proxy_pass指令使用。用于在insert+indirect模式和prefix模式下删除请求

用于sessionsticky的cookie,这样就不会将该cookie传递给后端服务。upstream表

示需要进行操作的upstream名称。


本文标签: 设置 服务 需要 使用 请求