经过 《nginx入门学习—— nginx添加未编译安装模块(一)》之后,访问nginx,http://192.168.12.70:80地址,登录,发现没法登录。但是,访问http://192.168.12.70:8080却能登录。出现这个问题,主要是因为session丢失问题,需要加一个模块nginx-sticky-module,可以防止session丢失(使用Nginx sticky模块实现基于cookie的负载均衡)。
1.下载nginx-sticky-module包(nginx-sticky-module-1.1不支持nginx1.6以上版本,如果nginx用的是1.6以上版本,可以在nginx的第三方网站ttp://wiki.nginx.org/3rdPartyModules上下载相应的module(最好不要用于生产环境,自己研究一下可以))
wget https://code.google.com/p/nginx-sticky-module/downloads/detail?name=nginx-sticky-module-1.1.tar.gz
2.安装ssl(如果已经安装了,就不需要安装了,sticky模块依赖这个包)
yum install openssl
yum install openssl-devel
3.重新添加模块,编译
./configure --prefix=/opt/icloudq/nginx --add-module=/opt/icloudq/nginx_tar/nginx-sticky-module-1.1
make
(不要make install,要不然就相当于重新安装了。)
4.关闭原来的nginx
kill -QUIT `cat /opt/icloudq/nginx/logs/nginx.pid`
5.复制编译后的二进制文件到目录
cp /opt/icloudq/nginx/sbin/nginx /opt/icloudq/nginx/sbin/nginx.bak
cp /opt/icloudq/nginx_tar/nginx-1.4.7/objs/nginx /opt/icloudq/nginx/sbin/nginx
6.修改配置nginx文件,使插件sticky生效
vim /opt/icloudq/nginx/conf/nginx.conf
在upstream中添加sticky;
http {
upstream uec_portal{
#添加sticky模块后加入此配置
sticky;
#被代理的服务
server 192.168.12.56:80;
server 192.168.12.70:8080;
}
server {
#nginx监听的端口
listen 80;
server_name localhost;
location / {
#代理
proxy_pass http://uec_portal;
}
}
}
7.测试配置文件是否OK
/opt/icloudq/nginx/sbin/nginx -t
8.启动nginx
/opt/icloudq/nginx/sbin/nginx
9.测试。
至此session丢失问题就解决了。