Nginx之sticky第三方模块使用解读

目录

基本介绍 

Sticky的安装

配置使用sticky

注意点说明


 

我们都知道Nginx具有负载均衡的功能,纯 ip_hash 像局域网内的访问ip访问会导致ip倾斜 ,cookie_hash服务器给客户端下发一个cookie,具有特定cookie的请求会分配给它的发布者,cookie需要浏览器支持。

基本介绍 

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

Sticky是nginx的一个模块,它是基于cooki e的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route

  • 1.客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。
  • 2.后端服务器处理完请求,将响应数据返回给nginx。
  • 3.此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值
  • 4.客户端接收请求,并保存带route的cookie。
  • 5.当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。

如果浏览器不支持cookie,那么sticky不生效,整个模块是给予cookie实现的。

Sticky的安装

下载地址

nginx-goodies / nginx-sticky-module-ng / Downloads — Bitbucketicon-default.png?t=N7T8https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/downloads/

  • 1)下载完成,放入服务器解压,记住解压的位置
  • 2)进入到nginx的安装文件
  • 3)配置nginx

 ./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--add-module=/tmp/sticky-module/nginx-goodies-nginx-sticky-module-ng

  • 红色部分修改为你解压后的路径 
  •  最后重新启动Nginx即可

make 编译的时候有可能会报错

修改:找到sticky刚刚的解压目录,进入修改文件 vim ngx_http_sticky_misc.h ,加入下面的头文件

#include <openssl/sha.h> 
#include <openssl/md5.h> 

nginx 启动 停止 重启命令 

/usr/local/nginx-1.9.9/sbin/nginx -s start
/usr/local/nginx1.9.9/sbin/nginx -s stop
/usr/local/nginx1.9.9/sbin/nginx -s reload

配置使用sticky

upstream iphashserver {

        sticky;
        server www.test.com:8001;
        server www.test.com:8002;

    }
 

具体可以附加参数如下: 

sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h] [hash=index|md5|sha1] [no_fallback] [secure] [httponly];

参数信息说明:

[name=route]       设置用来记录会话的cookie名称
[domain=.foo.bar]    设置cookie作用的域名
[path=/]          设置cookie作用的URL路径,默认根目录
[expires=1h]        设置cookie的生存期,默认不设置,浏览器关闭即失效,需要是大于1秒的值
[hash=index|md5|sha1]   设置cookie中服务器的标识是用明文还是使用md5值,默认使用md5
[no_fallback]       设置该项,当sticky的后端机器挂了以后,nginx返回502 (Bad Gateway or Proxy Error) ,而不转发到其他服务器,不建议设置
[secure]          设置启用安全的cookie,需要HTTPS支持
[httponly]         允许cookie不通过JS泄漏,没用过

注意点说明

  • .同一客户端的请求,有可能落在不同的后端服务器上如果客户端启动时同时发起多个请求。由于这些请求都没带cookie,所以服务器会随机选择后端服务器,返回不同的cookie。当这些请求中的最后一个请求返回时,客户端的cookie才会稳定下来,值以最后返回的cookie为准。
  • cookie不一定生效由于cookie最初由服务器端下发,如果客户端禁用cookie,则cookie不会生效。
  • 客户端可能不带cookie,Android客户端发送请求时,一般不会带上所有的cookie,需要明确指定哪些cookie会带上。如果希望用sticky做负载均衡,请对Android开发说加上cookie。
  • cookie名称不要和业务使用的cookie重名。Sticky默认的cookie名称是route,可以改成任何值。
  • 客户端发的第一个请求是不带cookie的。服务器下发的cookie,在客户端下一次请求时才能生效。
  • Nginx sticky模块不能与ip_hash同时使用
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在 macOS 上安装 nginx第三方模块可以使用 Homebrew 包管理器来简化过程。以下是安装第三方模块的步骤: 1. 首先,确保您已经安装了 Homebrew。如果您还没有安装,可以在终端中运行以下命令来安装 Homebrew: ``` /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ``` 2. 安装 nginx。在终端中运行以下命令来使用 Homebrew 安装 nginx: ``` brew install nginx ``` 3. 找到您想要安装的第三方 nginx 模块。您可以通过在搜索引擎上搜索或访问模块的官方网站来找到合适的模块。 4. 下载并解压第三方模块的源代码。将源代码解压到一个您可以方便访问的位置。 5. 进入解压后的模块源代码目录,并使用 `./configure` 命令配置编译选项。在这个命令中,您可以通过添加 `--add-dynamic-module=/path/to/module` 来指定要安装的模块。例如: ``` ./configure --add-dynamic-module=/path/to/module ``` 请将 `/path/to/module` 替换为您要安装的模块的实际路径。 6. 完成配置后,运行 `make` 命令编译 nginx。 7. 编译完成后,在终端中运行以下命令将编译好的模块复制到 nginx模块目录: ``` cp objs/*.so /usr/local/Cellar/nginx/{version}/libexec/modules/ ``` 请将 `{version}` 替换为您当前安装的 nginx 版本号。 8. 在终端中运行以下命令启动 nginx: ``` brew services start nginx ``` 现在,您已经成功安装了第三方模块,并且可以在 nginx 的配置文件中启用和配置它们。 请注意,安装第三方模块可能需要一些编译工具和依赖项。如果出现任何错误或依赖项缺失,您可能需要安装相应的工具和库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个风轻云淡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值