NGINX:sticky模块实现基于cookie的负载均衡总结

访客 阅读:189 2021-05-02 13:53:12 评论:0

Sticky模块

简述:

之前公司部署了一套网站及时发布系统,架构如下图所示;Nginx做前端代理,发布系统用tomcat运行,一台共享存储,一台数据库服务器;由于网站及时发布系统涉及到了用户登录操作,要保障客户端的会话完整,用nginx自带的ip_hash进行分发,但实际生产环境下出现了问题;系统大多是公司内部编辑人员进行编辑网页时访问,出口IP都一致,Nginx会把请求分发到一台服务器上,两台服务器并没有合理分配请求资源;所以这种情况下得用到sticky模块

sticky应用场景

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

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

编译安装

[[email protected] ~]# tar zxvf nginx-1.7.0.tar.gz     ###解压nginx源代码包 
[[email protected] ~]# tar zxvf nginx-sticky-module-1.1.tar.gz  ###然后解压sticky模块 
[[email protected] ~]# mv nginx-sticky-module-1.1 nginx-1.7.0  ###拷贝模块到nginx安装目录下 
[[email protected] ~]# ./configure --prefix=/data/nginx --with-http_stub_status_module --add-module=nginx-sticky-module-1.1 ###进入安装目录编译 
[[email protected] ~]# make &&  make install   编译安装 

注:nginx-1.8版本不知为何,sticky模式启用后,浏览器刷新后经常出现不稳定状况,会让用户重新登录

下载地址-》》IT虾米网

注意事项

nginx-1.5.x和nginx-sticky-module-1.1编译会有点问题,应该是nginx新版本没有相应的nginx-sticky-module

解决办法是把nginx-sticky-module-1.1/ngx_http_sticky_misc.c的281行修改为: 

digest->len = ngx_sock_ntop(in,sizeof(struct sockaddr_in), digest->data, len, 1);

由于编译需要,编译安装Nginx之前,要先安装openssl  yum -y install openssl-devel

Nginx配置文件

省略..................... 
 
upstream backserver { 
	sticky; 
	server 192.168.x.xx:8080; 
	server 192.168.x.xx:8080; 
} 
 
    server { 
        listen       80; 
        server_name  localhost; 
 
        #charset koi8-r; 
 
        access_log  logs/host.access.log  main; 
         location ~* ^(.*)$ { 
             #limit_req zone=allips burst=1 nodelay; 
  
             proxy_pass  http://backserver; 
             proxy_set_header Host $host; 
             proxy_set_header X-Real-IP $remote_addr; 
             proxy_set_header REMOTE-HOST $remote_addr; 
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
	     client_max_body_size 8m; 
             } 
 
省略................ 
}

重新启动nginx服务  nginx-sticky-module的cookie过期时间,默认浏览器关闭就过期,也就是会话方式


标签:linuxnginx
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
排行榜
KIKK导航

KIKK导航

关注我们