问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

nginx sticky expires=可以设置分钟吗

发布网友 发布时间:2022-04-26 14:17

我来回答

1个回答

热心网友 时间:2022-04-22 01:11

在多台后台服务器的环境下,我们为了确保一个客户只和一台服务器通信,我们势必使用长连接。使用什么方式来实现这种连接呢,常见的有使用nginx自带的ip_hash来做,我想这绝对不是一个好的办法,如果前端是CDN,或者说一个局域网的客户同时访问服务器,导致出现服务器分配不均衡,以及不能保证每次访问都粘滞在同一台服务器。如果基于cookie会是一种什么情形,想想看, 每台电脑都会有不同的cookie,在保持长连接的同时还保证了服务器的压力均衡,nginx sticky值得推荐。
如果浏览器不支持cookie,那么sticky不生效,毕竟整个模块是给予cookie实现的.
1、nginx sticky 模块工作流程图

nginx sticky
2、下载安装nginx sticky
下载地址:http://code.google.com/p/nginx-sticky-mole/downloads/list
目前共有2个版本,一个是1.0,一个是1.1,1.0已经寿终正寝了.1.1增加了权重的参数.
安装nginx + sticky模块
# wget http://nginx-sticky-mole.googlecode.com/files/nginx-sticky-mole-1.1.tar.gz
# tar -xzvf nginx-sticky-mole-1.1.tar.gz

# wget http://nginx.org/download/nginx-1.0.6.tar.gz
# tar -czvf nginx-1.0.6
# cd nginx-1.0.6
# ./configure --prefix=/usr/local/nginx-1.0.6 --with-http_stub_status_mole --with-http_ssl_mole --with-http_realip_mole --add-mole=../nginx-sticky-mole-1.1
# make
# make install

3、配置nginx sticky
nginx 的upstream使用sticky,如下
upstream cluster_test {
sticky;
server 192.168.100.209:80;
server 192.168.100.225:80;
}

配置虚拟主机(以下有配置的可以忽略掉)
server {
listen 80;
server_name test.ttlsa.com;
index index.jsp;

access_log /data/logs/nginx/test.ttlsa.com_access.log main;

set $proxy_pass cluster_test;

location /
{
proxy_pass http://$proxy_pass;
include proxy.conf;
add_header Cache-Control no-store;
}

}

备注:
nginx和apache不同,nginx每次安装一个新的模块都需要重新编译一次,编译完成之后将nginx这一个文件拷贝到sbin下面即可.我这边全新安装一次,因为公司在两年前就选择了这个nginx版本,也没打算去换,所以大家可以把nginx换成自己最合适的一个版本,不用完全跟着文章来安装.
4、重启nginx
/usr/local/nginx-1.0.6/sbin/nginx -t
/usr/local/nginx-1.0.6/sbin/nginx -s reload

5、测试nginx sticky
我后端是两台tomcat服务器,每台服务器的JESSIONED值都有特殊的标志。比如209这台是s209,225这台是s225.打开页面,不管怎么刷新JESSIONED值都是不变.但是如果开启了sticky,可以看到JESSIONED值不会发生变化.死死的粘滞在其中一台服务器上.测试图如下:
使用sticky的情况下,不管怎么刷新都是下面图

nginx sticky 模块
不使用nginx sticky模块,多刷几次就变了(有时候刷一次,有时候多刷几次,看概率,不过肯定会变),如下图

nginx sticky 模块
备注:每台后端真实服务器都会有一个唯一的route值,所以不管你真实服务器前端有几个装了sticky的nginx代理,他都是不会变化的. 这个cookie是会话方式的,所以你浏览器关闭了,服务器会给你重新分配一台服务器。
6、nginx sticky其他语法

sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h] [hash=index|md5|sha1] [no_fallback];
name: 可以为任何的string字符,默认是route
domain:哪些域名下可以使用这个cookie
path:哪些路径对启用sticky,例如path/test,那么只有test这个目录才会使用sticky做负载均衡
expires:cookie过期时间,默认浏览器关闭就过期,也就是会话方式。
no_fallbackup:如果设置了这个,cookie对应的服务器宕机了,那么将会返回502(bad gateway 或者 proxy error),建议不启用

7、nginx sticky expires用法
upstream cluster_test {
sticky expires=1h;
server 192.168.100.209:80;
server 192.168.100.225:80;
}

启用了过期,cookie如下截图,cookie1个小时才过期

nginx sticky expire用法
如下是不启用过期

nginx sticky 不启用expire

8、nginx sticky使用注意事项
nginx sticky模块不能与ip_hash同时使用
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? request header or cookie too large nginx/1.6.2 什么意思 nginx启动的时候 会清理过期session吗 通过nginx转发到不同IP的server后cookie作用域是否改变 nginx增加如下配置,根据ua和cookie判断当前是移动端还是pc端访问 nginx正则过滤$http_cookie字段。将其 非test_cookie键值对的 所有cookie值都匹配到$my_cookie变量中 nginx http 400 错误的请求怎么解决 nginx 静态文件怎么禁用Cookie 如何可以在nginx反向代理的情况下过滤掉源站的cookie nginx反向代理,cookie不存在 dreamweaver cc 2019正式版为什么没有amtlib.dll文件?要怎么破解 nginx服务器怎样向cookies里面添加数据 安装Adobe Dreamweaver cc2018SP时初始化完就没了 nginx rewrite 怎么带上cookie 有没有pr 2018的注册机?? Dreamweaver CC 2018如何破解? 谁有adobe DreamweaverCC2018破解补丁,最好是百度云 自首是如何被法律规定的?什么情节算是自首? 求大神分享Adobe Dreamweaver CC 2018 Mac中文包和破解工具~~!! 自首的认定标准是怎样的 自首的认定? 壁布还涂胶水吗? 壁布上的胶印怎么处理? 冷胶壁布有胶印怎么处理 墙布上面有胶水印。我用天那水擦洗后又流下了天那水的印。有什么办法能消除呢? 毛呢大衣太硬怎么办 怎么防止大衣起球 豆浆机打出的豆浆为什么是生豆子味道 为什么豆浆机打出的豆浆一股生黄豆味 九阳豆浆机能打生豆浆吗 我刚买了一个豆浆机,可为什么打豆浆时间很长,而且还一直有生豆的味... 豆浆可以用生豆子榨豆浆吗? 豆浆机打出来的豆浆都会有豆渣吗 为什么买的豆浆机打出来有个生豆子味道 用豆浆机做豆浆是用生豆还是湿豆好? 豆浆机打出来的豆浆有生豆子的味道怎么办? 做豆浆是用生豆子打好再煮,还是用熟豆子直接打好就可以喝了?_百度知 ... 九阳豆浆机做生豆糊的做法大全 我新买的九阳豆浆机打黄豆时,打出的豆浆有生豆味,而且不香 用豆浆机做豆浆怎么做到没有生豆味 微信没有账号保护怎么登陆 我的微信为什么没有帐号保护功能