Nginx 的 Session 粘连
在网站的应用中,常常对于同一个 session 的某个客户端的请求,一定要定位到同一台服务器.不然会出现反应登陆提交之类的问题.这一直以来就是一个棘手的问题.常见的解决方案是 session 共享.我们也能使用 nginx 的扩展模块来达到这个功能.就是使用 nginx-sticky-module 这个模块.
默认的 RR 和 ip_hash 之类是肯定不能定位到同一个 session 到相同的应用服务器上.所以使用上面这个模块的作用是根据的 cookie 的信息对后端的机器进行分发请求.
原理其实很简单,当一个客户端请求过来时,会 set-cookie 一个 cookie 来标注本次请求的服务器(第一次是随机).然后下次请求都会包含这个 cookie .然后就能很好的区分原本请求的服务器了.我测试过,当默认请求的后端服务器死掉后,会还是会自动切换的.另外,这个模块并不合适对不支持 Cookie 的浏览器.
下载地址:
配置非常容易:
upstream {
sticky;
server 127.0.0.1:9000;
server 127.0.0.1:9001;
server 127.0.0.1:9002;
}
下次请求就会有 cookie 的信息了:象 route=1a06c7beb951fc195dcaf59ca3caa0ff 这种信息.默认 cookie 的 key 是 route .还可以设置很多 Cookie 相关的其它的参数如 domain.这引起可以查看相关文档.
Nginx 的后端检查扩展
现在介绍另一个模块.进行后端 upstream 服务器的扩展监控的模块.默认 Nginx 并不能监控 http 的连接是否正常.所以需要使用这个模块来扩展.推荐的这个模块是基于原来的 healthcheck_nginx_upstreams 的设计思想的.
下载地址:https://github.com/yaoweibin/nginx_upstream_check_module
upstream {
server 127.0.0.1:9000;
server 127.0.0.1:9001;
server 127.0.0.1:9002;
check interval=3000 rise=2 fall=5 timeout=1000 type=http;
check_http_send "GET / HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
这个也象 haproxy 的这种功能的模块一样,提供了一个简单的界面来显示,只需要简单的配置一下:
location /status {
check_status;
access_log off;
}
难看是难看了点,但有比没有好对吧。