对nginx有一定了解了后就来干干试试它真正的用途
反向代理和负载均衡

那么什么是反向代理呢
首先我们要看一个正向代理,如果你要访问p站看点色图,那么你就需要翻墙,来访问p站,这个就是正向代理

反向代理就是,你现在要访问p站,p站悄悄的把这个请求交给了b站来做,那b站就是反向代理

先上一个图(我自己画的),这个是今天学的,目的就是可以优化页面的访问速度

Nginx反向代理

在Nginx下的conf文件里面修改location /

location / {
        proxy_pass http://127.0.0.1:8080;
    }

这个意思就是反向代理了tomcat,这个地址就是tomcat访问url
然后就是如果你可以在网址里面直接输入localhost,就可以访问tomcat,而不是直接访问localhost:8080

静态资源和动态资源分离

为什么要这么做呢,因为Nginx处理静态资源的能力比tomcat出色所以,我们用nginx来处理css,js和png图片
tomcat来处理jsp文件

同样的需要配置nginx的conf文件,这里是直接增加

location ~\.(css|js|png)$ {
            root D:/Eclipse-j2ee/lib/tomcat_8111/webapps/ROOT;
    }

相当于是一个正则表达式,root 后面是web项目资源,

负载均衡

有时候一个tomcat可以吃不消,所以我们用了两个一模一样的tomcat(端口不同)来接收请求

同样的还是配置文件nginx.conf,直接添加

upstream tomcat_8111_8222{
    server  127.0.0.1:8111  weight=1;
    server  127.0.0.1:8222  weight=2;
    }

这里weight就是权重的意思,端口号为8111的tomcat的权重为1,而端口号为8222的tomcat的权重为2,
其实实际跑的时候是随机的可能权重大的tomcat跑的次数多一点吧

redis的session共享

这个有什么用?

首先假设,如果一个用户在访问页面的时候用户所在的tomcat炸了。那么用户就要重新登录,
之前的操作也要重新再来,这个东西就是,十分的影响用户的体验,

所以就有两种解决的方案,一个是通过配置ip,一个是用redis来保存用户的session

在刚刚那里的配置文件后面加上一句 ip_hash

就像这样

upstream tomcat_8111_8222{
    server  127.0.0.1:8111  weight=1;
    server  127.0.0.1:8222  weight=2;
    ip_hash;
    }

但是通过ip来锁定用户是有缺陷的
如果是有大量的ip来访问的话。那就会都分配到同一个tomcat上,就是相当于是没有负载均衡了
这样就没有意义了。

所以我们可以通过下面这种方式来保证用户的体验

  1. 准备下面这三个jar包,导入到tomcat的lib下面 ,两个tomcat都要导入

jedis-2.5.2.jar,
commons-pool2-2.0.jar,
tomcat-redis-session-manager1.2.jar。

  1. 修改tomcat/conf/context.xml,两个tomcat都要改

    <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />  
    <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"  
    host="127.0.0.1"  
    port="6379"  
    database="0"  
    maxInactiveInterval="60" /> 
    

    直接增加就好了

  2. 启动redis服务

  3. 重启tomcat

现象:
现在如果你打开浏览器直接访问http://localhost:8111,然后输入了用户名,密码(产生一个session)
然后在打开http://localhost:8222,你会发现已经登录了。


一个好奇的人