`
y806839048
  • 浏览: 1126785 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Nginx Sticky的使用(nginx-sticky-module)

阅读更多

什么是Sticky?为了理解Sticky的工作原理,我们可以先考虑一个问题:负载均衡怎么做?

DNS解析,在域名解析时分配给不同的服务器IP;

IP Hash,根据客户端的IP,将请求分配到不同的服务器上;

cookie,服务器给客户端下发一个cookie,具有特定cookie的请求会分配给它的发行者。

Sticky就是基于cookie的一种负载均衡解决方案,通过cookie实现客户端与后端服务器的会话保持, 在一定条件下可以保证同一个客户端访问的都是同一个后端服务器。请求来了,服务器发个cookie,并说:下次来带上,直接来找我。

为方便叙述,文中的cookie都指sticky使用的cookie。

#Sticky工作原理 Sticky是nginx的一个模块,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上。sticky的处理过程如下(假设cookie名称为route):

1.客户端首次发起请求,请求头未带route的cookie。nginx接收请求,发现请求头没有route,则以轮询方式将请求分配给后端服务器。

2.后端服务器处理完请求,将响应头和内容返回给nginx。

3.nginx生成route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值。

4.客户端接收请求,并创建route的cookie

5.客户端再次发送请求时,带上route

6.nginx接收到route直接转给对应的后端服务器。

关于sticky的详细的配置过程在 这里

#参数解析

语法:session_sticky [cookie=name] [domain=your_domain] [path=your_path] [maxage=time] [mode=insert|rewrite|prefix] [option=indirect] [maxidle=time] [maxlife=time] [fallback=on|off] [hash=plain|md5]

 

默认值:session_sticky cookie=route mode=insert fallback=on

上下文:upstream

说明:

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

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

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

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

maxage设置cookie的生存期,默认不设置,即为session cookie,浏览器关闭即失效

mode设置cookie的模式:

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

    prefix: 不会生成新的cookie,但会在响应的cookie值前面加上特定的前缀,当浏览器带着这个有特定标识的cookie再次请求时,模块在传给后端服务前先删除加入的前缀,后端服务拿到的还是原来的cookie值,这些动作对后端透明。如:”Cookie: NAME=SRV~VALUE”。

    rewrite: 使用服务端标识覆盖后端设置的用于session sticky的cookie。如果后端服务在响应头中没有设置该cookie,则认为该请求不需要进行session sticky,使用这种模式,后端服务可以控制哪些请求需要sesstion sticky,哪些请求不需要。

option 设置用于session sticky的cookie的选项,可设置成indirect或direct。indirect不会将session sticky的cookie传送给后端服务,该cookie对后端应用完全透明。direct则与indirect相反。

maxidle设置session cookie的最长空闲的超时时间

maxlife设置session cookie的最长生存期

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

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


maxage是cookie的生存期。不设置时,浏览器或App关闭后就失效。下次启动时,又会随机分配后端服务器。所以如果希望该客户端的请求长期落在同一台后端服务器上,可以设置maxage。

hash不论是明文还是hash值,都有固定的数目。因为hash是server的标识,所以有多少个server,就有等同数量的hash值。

#一些例外#

##同一客户端的请求,有可能落在不同的后端服务器上## 如果客户端启动时同时发起多个请求。由于这些请求都没带cookie,所以服务器会随机选择后端服务器,返回不同的cookie。当这些请求中的最后一个请求返回时,客户端的cookie才会稳定下来,值以最后返回的cookie为准。

##cookie不一定生效## 由于cookie最初由服务器端下发,如果客户端禁用cookie,则cookie不会生效。

##客户端可能不带cookie## Android客户端发送请求时,一般不会带上所有的cookie,需要明确指定哪些cookie会带上。如果希望用sticky做负载均衡,请对Android开发说加上cookie。

#注意事项 * cookie名称不要和业务使用的cookie重名。Sticky默认的cookie名称是route,可以改成任何值。但切记,不可以与业务中使用的cookie重名。 * 客户端发的第一个请求是不带cookie的。服务器下发的cookie,在客户端下一次请求时才能生效。

Published: August 01 2015

分享到:
评论

相关推荐

    nginx-sticky-module-1.25.zip

    ./configure --prefix=/usr/local/nginx-1.6.0 --add-module=../nginx-sticky-module-1.25 --without-http_ssi_module --without-http_autoindex_module --without-http_fastcgi_module --with-...

    nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip

    (f)Nginx sticky模块不能与ip_hash同时使用 sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h] [hash=index|md5|sha1] [no_fallback] [secure] [httponly]; [name=route] 设置用来记录会话的cookie...

    nginx-sticky-module-ng-1.2.6.tar.gz

    在 `nginx-sticky-module-ng-1.2.6` 压缩包中,通常包含以下组件: 1. `src`: 这是源代码目录,包含了模块的核心代码,如 `ngx_http_sticky_module.c`,它是实现会话保持功能的主要源文件。 2. `config`: 配置脚本...

    nginx-sticky-module-1.1

    **Nginx Sticky Module 1.1 知识点详解** Nginx 是一款高性能、轻量级的 Web 服务器/反向代理服务器,广泛应用于网站的负载均衡配置。而 Nginx 的 sticky 模块是它的一个扩展,用于实现会话持久化,即在负载均衡...

    nginx-goodies-nginx-sticky-module-ng-s12451asdasd

    目前的项目网站架构中使用了F5和nginx,F5用来做负载均衡,nginx只用作反向代理服务器。最近应客户的要求准备去掉F5...上网搜索了一番,知道了nginx-sticky-module这个第三方模块可以基于cookie实现会话保持,决定试试

    Ubuntu下nginx1.6和sticky1.1安装配置资料 包

    mv nginx-sticky-module-1.1/ modules/ ``` 现在,你需要配置Nginx编译选项,将Sticky模块包含进来: ```bash ./configure --prefix=/usr/local/nginx \ --with-http_stub_status_module \ --with-...

    nginx-sticky-module-1.26

    3. **配置编译参数**:在 Nginx 的 `configure` 脚本中,使用 `--add-module` 参数指定 `nginx-sticky-module-1.26` 的路径。 4. **编译和安装**:执行 `./configure`,然后运行 `make` 和 `make install` 完成编译...

    nginx-goodies-nginx-sticky-module-ng-08a395c66e42.tar.gz

    nginx-goodies-nginx-sticky-module-ng-08a395c66e42.tar.gz

    nginx-sticky-module nginx.conf 配置文件

    nginx-sticky-module nginx.conf 配置文件!!!!!!

    sticky-headers-recyclerview.zip

    【标题】"Sticky-Headers-RecyclerView.zip" 是一个压缩包,它包含了一个关于在Android开发中实现固定头部(Sticky Headers)的RecyclerView示例项目。RecyclerView是Android平台上的一个高效列表视图,常用于显示...

    nginx-1.10.3.tar.gz、nginx-sticky-module-1.1.tar.gz 实现session粘性共享

    包括nginx-1.10.3.tar.gz、nginx-sticky-module-1.1.tar.gz、zlib-1.2.8.tar.gz、openssl-1.0.1c.tar.gz、pcre-8.21.tar.gz以及按照过程可能的错误解决发法

    nginx-sticky模块

    因此,社区开发了更新的`nginx-goodies-nginx-sticky-module-ng`,以兼容最新的Nginx版本。这个模块的版本号为`08a395c66e42`,意味着它在不断地进行优化和改进,以适应不断变化的技术环境。 **会话持久化的重要性*...

    nginx-autoinstall, 在Debian和Ubuntu上,使用定制模块从源代码编译 Nginx.zip

    nginx-autoinstall, 在Debian和Ubuntu上,使用定制模块从源代码编译 Nginx 自动安装通过optionnal模块编译和安装 Nginx 。 兼容性x86,x64,arm*Debian 8和更高版本Ubuntu 16.04和更高版本特性最新的主线或者稳定...

    nginx-sticky 不报错版

    1. **获取源码**:首先,从 GitHub 或其他来源下载 Nginx 的 sticky 模块源码,例如 `nginx-sticky-module-1.1`。 2. **安装依赖**:确保系统已经安装了编译 Nginx 所需的依赖,如 `pcre`、`openssl` 和 `zlib`。 3....

    nginx-sticky

    **Nginx Sticky 插件详解** 在高并发的网络服务环境中,负载均衡是一个至关重要的概念,它能够将用户请求合理地分散到多台服务器上,以提高系统的可用性和响应速度。然而,有些应用场景需要保持会话持久性,即来自...

    nginx 1.24.0 docker 镜像已编译好 sticky 会话保持

    nginx容器内安装目录: /home/nginx/nginx_stream 免重新编译,解决1.24.0 编译sticky 失败问题,启动即用

    Nginx-sticky模块(基于cookie的负载均衡实现)及追加安装注意事项

    Nginx-sticky模块(基于cookie的负载均衡实现)及追加安装注意事项

    nginx-upstream-jvm-route-1.12.0.tar.gz

    # ./configure --prefix=/usr/nginx-0.8.1 --with-http_stub_status_module --add-module=/path/to/this/directory/ #make #make install 例如以下配置: 1. Resin: upstream backend { server 192.168.0.100...

    nginx-upstream-jvm-route nginx共享Session

    7. **其他Session共享策略**:除了上述的Nginx-upstream-jvm-route,还可以使用如 sticky sessions(基于Cookie的粘滞会话),通过在客户端保存特定的服务器标识来实现Session的保持;或者利用外部存储如Redis、...

    linux下nginx安装配置相关资源

    ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_realip_module --add-module=path/to/sticky_module make && sudo make install ``` 3. 配置Nginx:在`nginx.conf`或对应的...

Global site tag (gtag.js) - Google Analytics