运维百科

nginx添加模块(非覆盖安装)使用nginx sticky实现基于cookie的负载均衡

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

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

nginx sticky 模块工作流程图

clip_image001.jpg

官方下载地址:http://code.google.com/p/nginx-sticky-module/downloads/list  //建议翻墙

CSDN下载地址:http://download.csdn.net/detail/u014799292/9506315

目前共有2个版本,一个是1.0,一个是1.11.0已经寿终正寝了.1.1增加了权重的参数.

clip_image003.png

平滑无缝升级Nginx并安装nginx + sticky模块

nginx每次安装一个新的模块都需要重新编译一次,编译完成之后将nginx这一个文件拷贝到sbin下面即可。

# wget http://nginx-sticky-module.googlecode.com/files/nginx-sticky-module-1.1.tar.gz
# tar -xzvf nginx-sticky-module-1.1.tar.gz
 
# wget http://nginx.org/download/nginx-1.10.3.tar.gz
# tar -czvf nginx-1. 10.3
# cd nginx-1. 10.3
 
# /usr/local/nginx/sbin/nginx -V  //需要查看原来安装的nginx的版本以及编译的参数
--with-http_gzip_static_module --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --add-module=../nginx-sticky-module-1.1  //原有参数基础之上增加参数
 
//--with-http_gzip_static_module        启用ngx_http_gzip_static_module支持(在线实时压缩输出数据流)
//--with-http_stub_status_module                   启用ngx_http_stub_status_module支持(获取nginx自上次启动以来的工作状态)
//--with-http_ssl_module                  启用ngx_http_ssl_module支持(使支持https请求,需已安装openssl)
//--with-http_realip_module            启用ngx_http_realip_module支持(这个模块允许从请求标头更改客户端的IP地址值,默认为关)
//--add-module=PATH                启用外部模块支持
 
# make  //编译完,在objs目录下有一个nginx执行文件,不要make install,否则就是覆盖安装;
# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
# cp objs/nginx /usr/local/nginx/sbin/nginx
# make upgrade       //替换老的nginx进程
#再次执行:/usr/local/nginx/sbin/nginx -V 将会显示新的nginx的版本及编译的参数。

 配置nginx sticky

nginx upstream使用sticky,如下

upstream aaa {
     sticky;
     server 192.168.100.20:80;
     server 192.168.100.21:80;
}

配置虚拟主机(以下有配置的可以忽略掉)

server {
        listen       80;
        server_name  localhost;
        location /
        {
                   proxy_pass http://aaa;
                   proxy_redirect default;
                   proxy_set_header Host $host;
                   proxy_set_header X-Forwarded-For $remote_addr;
                   proxy_connect_timeout 60;
                   proxy_send_timeout 600;
                   proxy_read_timeout 600;
                   proxy_buffer_size 4k;
                   proxy_buffers 4 32k ;
                   proxy_busy_buffers_size 64k;
                   proxy_temp_file_write_size 64k;
        }
 }

 重启nginx

/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload

 官方文档:http://code.google.com/p/nginx-sticky-module/wiki/Documentation  //翻墙后打开


本站部分资源收集于网络,纯个人收藏,无商业用途,如有侵权请及时告知!

0
分享到:

评论 0

取消
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址