@[toc]
前期准备
windows
1.下载nginx, 点击下载
- 解压并启动nginx, 双击nginx.exe
- 测试是否启动,访问 http://127.0.0.1
- 下载tomcat8111(端口为8111的tomcat)点击 这里下载
- 下载tomcat8222(端口为8222的tomcat)点击这里下载
linux
1 | # 安装Nginx源库 |
1. 反向代理
1.1 概念
先说正向代理,比如要访问youtube,但是不能直接访问,只能先找个翻墙软件,通过翻墙软件才能访问youtube. 翻墙软件就叫做正向代理。
所谓的反向代理,指的是用户要访问youtube,但是youtube悄悄地把这个请求交给bilibili来做,那么bilibili就是反向代理了。
在当前教程指的就是访问nginx,但是nginx把请求交给tomcat来做。
1.2 实现
修改 nginx.conf 文件
1 | location / { |
location / 表示处理所有请求
proxy_pass http://127.0.0.1:8111 表示把请求都交给:http://127.0.0.1:8111 (tomcat的访问地址)来处理
1.3 访问
1、启动tomcat (端口为8111)
2、 重启nginx
1 | nginx -s reload |
3、 访问地址
http://127.0.0.1 就会发现已经反向代理到:http://127.0.0.1:8111
2. 动静分离
2.1 概念
所谓的动静分离就是指图片,css, js之类的都交给nginx来处理,nginx处理不了的,比如jsp 就交给tomcat来处理~
好处是nginx处理静态内容的吞吐量很高,比tomcat高多了,这样无形中提升了性能。
2.2 实现
修改nginx.conf文件
在locaction下面添加一个新的location:
1 | location ~\.(css|js|png)$ { |
这表示所有的css js png访问都由nginx来做,访问的地址是:
D:/tomcat_8111/webapps/ROOT
jsp中:
3. 负载均衡
3.1 概念
负载均衡的概念就是当访问量很大的时候,一个 Tomcat 吃不消了,这时候就准备多个 Tomcat,由Nginx按照权重来对请求进行分配,从而缓解单独一个Tomcat受到的压力
3.2 启动两个tomcat
记得要修改两个tomcat的端口,两个tomcat的端口不能一样,
这里我们使用8111端口和8222端口
3.3 修改nginx.conf文件
首先增加一个upstream ,用来指向这两个tomcat
1 | upstream tomcat_8111_8222{ |
然后修改location,反向代理到上述配置。
1 | location / { |
weight表示权重,值越大,被分配到的几率越大。
3.4 重启nginx并访问
4. session共享
4.1 概念
通过负载均衡课程,我们可以把请求分发到不同的 Tomcat 来缓解服务器的压力,但是这里存在一个问题: 当同一个用户第一次访问tomcat_8111 并且登录成功, 而第二次访问却被分配到了tomcat_8222, 这里并没有记录他的登陆状态,那么就会呈现未登录状态了,严重伤害了用户体验。
4.2 解决办法(一)
通过ip地址标记用户,如果多次请求都是从同一个ip来的,那么就都分配到同一个tomcat.
这样就不会出现负载均衡 session问题了. 处理手段也很简单,在nginx.conf 文件中修改upstream结点。如图所示在upstream最后加上ip_hash;就行了。
1 | upstream tomcat_8111_8222{ |
不过这种方案并不完美,当如下几种情况发生时就有问题:
- 大量请求来之某个局域网,那么相当于就没有负载均衡了
- 如果tomcat_8111 挂了,那么此时nginx只能把请求交给tomcat_8222,但是这里却没有记录session,用户体验依然受影响。
4.3 解决方法(二)
用Redis来存取session.
Redis是什么呢?说简单点就是个独立的Hashmap,用来存放键值对的。
这样当tomcat1需要保存session值的时候,就可以把它放在Redis上,需要取的时候,也从Redis上取。
那么考虑这个情景:
- 用户提交账号密码的行为被分配在了tomcat8111上,登陆信息被存放在redis里。
- 当用户第二次访问的时候,被分配到了tomcat8222上
- 那么此时tomcat8222就会从redis去获取相关信息,一看有对应信息,那么就会呈现登陆状态。
这样就规避了解决办法一: ip_hash里会出现的两种问题了。
4.3.1 启动redis
1.点击下载
2.解压
3.双击 start.bat 启动
4.3.2 下载jar包
Tomcat需要链接 redis,所以需要专门的jar包,这些包都放在了右上角的tomcat-redis.rar里。 一共
有3个jar包:
jedis-2.5.2.jar,
commons-pool2-2.0.jar,
tomcat-redis-session-manager1.2.jar。
点击 这里下载
下载解压后,放在tomat8111的lib目录下。注:不要放在webapp里面去了
下载解压后,放在tomat8222的lib目录下。注:不要放在webapp里面去了
两个tomcat都要放
4.3.3 修改context.xml文件
修改tomcat/conf/context.xml ,增加下面内容
1 | <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" /> |
两个tomcat都要改
4.3.4 重启tomcat
两个tomcat都要重启
启动完就大功告成了