Nginx 模块推荐 Session 粘连和扩展失败测试,这一直以来就是一个棘


Nginx 的 Session 粘连

在网站的应用中,常常对于同一个 session 的某个客户端的请求,一定要定位到同一台服务器,不然会出现反应登陆提交之类的问题。这一直以来就是一个棘手的问题,常见的解决方案是 session 共享。我们也能使用 nginx 的扩展模块来达到这个功能,就是使用 nginx-sticky-module 这个模块。

默认的 RR 和 ip_hash 之类是肯定不能定位到同一个 session 到相同的应用服务器上,所以使用上面这个模块的作用是根据的 cookie 的信息对后端的机器进行分发请求。原理其实很简单,当一个客户端请求过来时,会 set-cookie 一个 cookie 来标注本次请求的服务器(第一次是随机)。然后下次请求都会包含这个 cookie ,然后就能很好的区分原本请求的服务器了。我测试过当默认请求的后端服务器死掉后,会还是会自动切换的。另外这个模块并不合适对不支持 Cookie 的浏览器。

下载地址:http://code.google.com/p/nginx-sticky-module/downloads/list

配置非常容易:

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;
} 

难看是难看了点,但有比没有好对吧。

相关内容