nginx安装配置
1.安装nginx

提示报如下错误:

解决办法安装epel:EPEL是企业版 Linux 附加软件包的简称,EPEL是一个由Fedora特别兴趣小组创建、维护并管理的,针对 红帽企业版 Linux(RHEL)及其衍生发行版(比如 CentOS、Scientific Linux、Oracle Enterprise Linux)的一个高质量附加软件包项目;

安装完之后,即可成功安装nginx;
2.启动、停止nginx
先进入nginx的目录

执行命令

nginx+tomcat负载均衡
1.准备2个tomcat,分别指定端口为8081,8082

修改webapps/ROOT的index.jsp,方便测试

最后的输出在两个tomcat下面指定各自的端口号8081和8082
2.nginx配置负载均衡(默认策略)
修改/etc/nginx/下面的nginx.conf

此处配置的负载均衡策略是默认的轮询策略,nginx还支持其他策略包括:ip_hash、weight、fair(第三方)、url_hash(第三方);
默认策略每个web请求按时间顺序逐一分配到不同的后端服务器,这种情况下每次请求都会创建一个新的session,下面做简单测试:
第一次请求http://ip/

第二次刷新http://ip/

第三次刷新http://ip/

可以发现每次都产生一个新的session,而且消息按时间顺序逐一分配到不同的后端服务器,一般需要保持session会话的网站都不允许出现每次请求都产生一个session;
3.nginx配置负载均衡(黏性Session)
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题;nginx可以通过在upstream模块配置ip_hash来实现黏性Session;

下面做简单测试:
第一次请求http://ip/

第二次刷新http://ip/

第三次刷新http://ip/

可以发现第一次请求设置了key=value,后面每次都能获取到key值,sessionId没有改变,tomcat也没有改变,实现了黏性Session;
此时可以把port=8081的tomcat停掉,然后再观察
第四次刷新http://ip/

第五次刷新http://ip/

可以发现消息转发到了tomcat-8082,并且session丢失,重新创建了新的session;
如何让这种情况session不丢失,也有两种方案:Session复制和Session共享;Session共享从扩展性,性能方面都更加好,下面重点介绍一下Session共享如何实现;
nginx+tomcat实现Session共享
Session共享思想就是把session保存到一个公共的地方,用的时候再从里面取出来,具体这个公共的地方可以是:redis,db,memcached等,下面已redis为实例
1.redis安装配置

安装完成以后配置文件/etc/redis.conf
启动redis服务端

启动客户端

2.Tomcat引入依赖的jar
$TOMCAT_HOME/lib添加如下jar包

3.Tomcat修改配置
修改$TOMCAT_HOME/conf目录下的context.xml文件

Tomcat提供了一个开放的session管理和持久化的org.apache.catalina.session.ManagerBase,继承这个抽象类并做一些简单的配置,即可让你的session管理类接管Tomcat的session读取和持久化,这里使用的是tomcat-redis-session-manager来管理session;
RedisSessionManager继承于org.apache.catalina.session.ManagerBase类,对session的相关操作都在此类中;
4.测试
第一次请求http://ip/

第二次刷新http://ip/

将tomcat-8081停掉, 第三次刷新http://ip/

可以发现此时消息已经转发到tomcat-8082节点了,但是session没有改变,同时key也可以获取到值;
5.查看redis

可以发现redis里面已经存放了session对象,并且使用sessionId作为key值,存放了session的二进制数据;

网友评论