Linux nginx 会话保持(session)
nginx 会话保持(session)有2种算法,一种是自带IP HASH 算法,一种是基于第三方模块sticky模块来实现会话保持
1)ip_hash
简单易用,但是有如下缺点
- 后端服务器宕机后,session会丢失
- 来自同一局域网的客户端会被转发到同一个后端服务器,可能导致负载失衡
- 不适用CDN网络,不适用于前段还有代理的情况
2)sticky
使用sticky启用会话亲缘关系,这会导致来自同一客户端的请求被传递到一组服务器的同一台服务器;与ip_hash不同之处在于,他不是基于ip来判断客户端的,而是基于cookie来判断;因此可以避免上述ip_hash中来自同一局域网的客户端和前段代理导致负载失衡的情况。
说明:
- expires:设置浏览器中保持cookie的时间
- domain:定义cookie的域
- path:为cookie定义路径
2种算法如何配置部署
nginx 安装
1.下载nginx
wget http://nginx.org/download/nginx-1.10.3.tar.gz
tar xvf nginx-1.10.3.tar.gz

2 .编译安装
cd nginx-1.10.3
./configure --prefix=/data/server/nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_ssl_module --with-http_stub_status_module --with-pcre --with-stream
make && make install
ip_hash算法配置
配置文件

后端的8001,8002,8003是我的3个flask 小程序1.py, 2.py 3.py(运行方法 python 1.py &),代码如下,3个程序端口不一样

修改配置文件后检查nginx配置文件是否有效 /data/server/nginx/sbin/nginx -t,无报错,在重启nginx /data/server/nginx/sbin/nginx -s reload

测试结果

sticky 模块算法配置
sticky 为第三方模块 ,所有需要我们自行下载安装,所有我们首先安装sticky模块
下载并解压模块
wget https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/master.tar.gz
tar zxvf master.tar.gz
mv nginx-goodies-nginx-sticky-module-ng-08a395c66e42/ nginx-sticky
进入之前解压nginx 的目录 ,重新编译安装
cd nginx-1.10.0
./configure --prefix=/data/server/nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_ssl_module --with-http_stub_status_module --with-pcre --with-stream --add-module=/root/nginx-sticky
make && make install
修改配置文件(在nginx.conf配置文件中 http 括号内 加如下内容)
upstream pool1 {
sticky;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 7999;
server_name 0.0.0.0;
access_log logs/7999.log;
error_log logs/7999.error;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://pool1;
}
}

修改配置文件后检查nginx配置文件是否有效 /data/server/nginx/sbin/nginx -t,无报错,在重启nginx /data/server/nginx/sbin/nginx -s reload
测试访问
