1、实验环境
windows :218.193.154.155 nginx
lenovo2 :218.193.154.148 tomcat
lenovo3 :218.193.154.152 tomcat
2、简单的负载均衡小例子:
#Nginx所有用户和组,window下不指定
#user nobody;
#工作的子进程数量(通常等于CPU数量或者2倍于CPU) worker_processes 1;
worker_processes 1;
#错误日志存放路径
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#指定pid(进程id)存放文件
#pid logs/nginx.pid;
#执行的事件
events {
#允许最大连接数
worker_connections 1024;
}
http {
#这两个文件是我们新建的,要导入
include proxy.conf;
#负责代理转发
include gzip.conf;
#负责压缩数据流
upstream cluster {
#ip_hash;
server 218.193.154.148:8888 weight=1;
server 218.193.154.152:8888 weight=1;
}
# MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型
include mime.types;
#默认类型——八字节数据流
default_type application/octet-stream;
#发送文件
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://cluster;
proxy_store off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /nginxstatus {
stub_status on;
access_log on;
auth_basic "nginxstatus";
auth_basic_user_file htpasswd;
}
}
}
测试结果,当输入http://localhost/SSH_Test/ 时,可以在两台服务器之间切换,笔者写了个小测试程序用于测试,Session共享,结果如下:
不仅Session不会共享,本身的Session也会发生变化,假如Nginx向lenovo2发生A请求,向lenovo3发生C请求。那么JSESSIONID会发生变化的情况如下:
AC 、CA不会发生改变的情况AA、CC。一旦Nginx发起和之前不同的请求,那么JSESSIONID随之发生变化,这样存储在Session的中变量将不会展示。
3、Session共享设置,本文使用redis共享Session。
3-1)安装redis,最简单方式之一使用yum install redis即可,如果库中没有,读者可以从这里下载更新yum库,http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm,之后rpm -ivh /usr/data/epel-release-6-8.noarch.rpm。然后使用yum即可。
3-2)配置redis的端口版本默认是127.0.0.1,这种绑定方式,其他机器无法访问,故而进行修改。/etc/redis.conf,修改内容如下:
# If you want you can bind a single interface, if the bind option is not
# specified all the interfaces will listen for incoming connections.
#
bind 218.193.154.152
3-3)下载tomcat Redis支持,源码地址为:https://github.com/jcoleman/tomcat-redis-session-manager,目前支持tomcat6及tomcat7,本文使用的是tomcat6,对源码进行编译后可以生成tomcat-redis-session-manager-master.jar 。tomcat lib目录展示如下:
3-4)配置tomcat,修改conf/context.xml,修改内容如下:
<Context>
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
host="lenovo3"
port="6379"
database="0"
maxInactiveInterval="60"/>
</Context>
4、测试结果如下
可以看到两次的Cookie已经相同,并且界面上也能够直接输出Session中的内容。