【菜鸟dei学习】Nginx简单配置:负载均衡与动静分离

反向代理

首先我们来说说***正向代理***。比如你要访问资源A,但是访问不到,你可以通过访问资源B,再通过它你访问到资源A,这即是正向代理。可能多个用户都通过资源B访问资源A,它隐藏了客户端的访问身份,代替客户与服务器交互,这就是代理。

反向代理,我们指的是我们访问nginx,但是nginx把请求转给tomcat,这样的模式和正向代理相反,即为反向代理。

【菜鸟dei学习】Nginx简单配置:负载均衡与动静分离_第1张图片

为什么要做反向代理?

既然通过http://127.0.0.1:8080/login.jsp可以直接访问,为何要通过http://127.0.0.1/login.jsp去反向代理到tomcat?

【菜鸟dei学习】Nginx简单配置:负载均衡与动静分离_第2张图片

配置负载均衡

负载均衡的概念就是当访问量很大的时候,一个 Tomcat 吃不消了,这时候就准备多个 Tomcat,由Nginx按照权重来对请求进行分配,从而缓解单独一个Tomcat受到的压力(权重模式)

【菜鸟dei学习】Nginx简单配置:负载均衡与动静分离_第3张图片
配置upstream多节点,在server{}中设置反向代理到多节点

完成上图的配置后,我发现,静态资源无法访问。

修改配置
【菜鸟dei学习】Nginx简单配置:负载均衡与动静分离_第4张图片

配置动静分离

因为nginx在处理静态文件时比tomcat高效,所以在使用nginx时,通常不会把所有的请求都如本例所示的交给tomcat, 而是把静态请求交给nginx,动态请求,如jsp, servlet,ssm,struts等请求交给tomcat. 从而达到动静分离的效果
(取自https://how2j.cn/)
【菜鸟dei学习】Nginx简单配置:负载均衡与动静分离_第5张图片
在nginx配置文件Server{ }中,location /下方添加以下一段话
【菜鸟dei学习】Nginx简单配置:负载均衡与动静分离_第6张图片
这表示所有的css js png等访问都由nginx来做,访问的地址是C:/Users/CJH/tomcat_1/webapps

其他问题

Session会话问题

通过负载均衡,我们把请求分发到不同的 Tomcat 来缓解服务器的压力,但是这里存在一个问题: 当同一个用户第一次访问tomcat_8080 并且登录成功, 而第二次访问却被分配到了tomcat_8081, 这里并没有记录他的登陆状态,那么就会呈现未登录状态了,严重伤害了用户体验。

解决方案:

1:ip_hash

通过ip地址标记用户,如果多次请求都是从同一个ip来的,那么就都分配到同一个tomcat. 这样就不会出现问题了了. 处理手段也很简单,在upstream最后加上ip_hash;就行了。 不过这种方案并不完美,当如下几种情况发生时就有问题:1. 大量请求来之某个局域网,那么相当于就没有负载均衡了。2. 如果tomcat_8080挂了,那么此时nginx只能把请求交给tomcat_8081,但是这里却没有记录session,用户体验依然受影响。
【菜鸟dei学习】Nginx简单配置:负载均衡与动静分离_第7张图片

2:用Redis来存取session.

Cookie问题

相同域名不同端口的两个应用,cookie名字、路径都相同的情况下,后面cookie会覆盖前面cookie
修改两个tomcat的conf/context.xml分别为
在这里插入图片描述
严格来说这个不是nginx的问题,但是因为多节点布在了同ip的不同端口,于是存在了cookie覆盖的问题,故在此解决。

你可能感兴趣的:(工具)