反向代理概念

先说正向代理,比如要访问youtube,但是不能直接访问,只能先找个翻墙软件,通过翻墙软件才能访问youtube. 翻墙软件就叫做正向代理。
所谓的反向代理,指的是用户要访问youtube,但是youtube悄悄地把这个请求交给bilibili来做,那么bilibili就是反向代理了。
在当前教程指的就是访问nginx,但是nginx把请求交给tomcat来做。

nginx.conf

location / 标识处理所有请求

proxy_pass http://127.0.0.1:8080/; (tomcat端口), 表示把请求都交给 http://127.0.0.1:8080 来处理

重启nginx

nginx -s reload

既然能通过8080访问,为什么要通过nginx 80端口 去反向代理到tomcat呢?

因为nginx在处理静态文件的吞吐量上面比tomcat好很多,通常他们俩配合,不会把所有的请求都如本例所示交给tomcat,而是把静态请求交给nginx,动态请求,

如jsp,servlet,ssm,等请求交给tomcat,从而达到动静分离的效果.

动静分离

所谓的动静分离就是指图片,css,js之类的都交给nginx来处理,nginx处理不了的,比如jsp交给tomcat来处理.

好处是nginx处理静态内容的吞吐量很高,比tomcat高多了,这样无形中提升了性能.

修改nginx.conf实现动静分离

增加一个location

        location ~\.(css|js|png|jpg)$ {
root /www/server/apache-tomcat-8.5.32/webapps/ROOT;
}

这表示所有的css,js,png,jpg访问都由nginx来做,访问地址是root后面路径

注意,这里的地址要用正斜杠 / 而不是要用反斜杠 \

负载均衡

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

修改nginx.conf支持两个tomcat

    upstream tomcat_8080_8082{
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8082 weight=2;
}

然后修改location,反向代理到上述配置

    location / {
proxy_pass http://tomcat_8080_8082;
}

weight表示权重,值越大,被分配到的几率越大.最大多少?不太清楚,10以内基本OK了.

重启 nginx -s reload 就可以实现基本的负载均衡了

session共享

通过负载均衡,可以把请求分发到不同的Tomcat来缓解服务器压力,但是存在一个问题:当同一个用户第一次访问tomcat:8080并且登录成功,

而第二次访问却分配到了tomcat:8082,这里并没有记录他的登录状态,那么就会呈现未登录状态. 也就是session没有实现共享.

解决办法:

ip_hash,通过ip地址标记用户,如果多次请求都是从同一个ip来的,那么就都分配到同一个tomcat.

这样就不会出现负载均衡的session问题了,处理手段也很简单.

    upstream tomcat_8080_8082{
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8082 weight=2;
ip_hash;
}

这种方案不是很完美,1.大量请求来自某个局域网,就没有负载均衡了.2.如果tomcat:8080挂了,那么此时nginx只能把请求交给tomcat:8082,但是这里却没有记录session.

解决办法Ⅱ

redis+tomcat-session-manager

第二种办法是用Redis来存取session.Redis这个独立的HashMap,存放session非常合适.当tomcat:8080需要保存session时,放入Redis,取的时候也从Redis取.

1.用户提交账号密码后被分配到tomcat:8080,登录信息被存放到Redis中.

2.当用户第二次访问时,被分配到了tomcat:8082.

3.此时tomcat:8082就会从Redis获取相关信息,如果有对应信息,就会呈现登录状态了.

在两个tomcat的配置文件 tomcat/conf/context.xml 中需要加入:

  <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" />

之后重启两个tomcat

完成配置.

[nginx] - 使用nginx实现反向代理,动静分离,负载均衡,session共享的更多相关文章

  1. nginx作反向代理,实现负载均衡

    nginx作反向代理,实现负载均衡按正常的方法安装好 ngixn,方法可参考http://www.cnblogs.com/lin3615/p/4376224.html其中作了反向代理的服务器的配置如下 ...

  2. Nginx反向代理实现Tomcat负载均衡

    这篇短文主要介绍Tomcat的集群和用Nginx反向代理实现Tomcat负载均衡. 1.首先需要对一些知识点进行扫盲(对自己进行扫盲,囧): 集群(Cluster) 简单来说就是用N台服务器构成一个松 ...

  3. Nginx 部署、反向代理配置、负载均衡

    Nginx 部署.反向代理配置.负载均衡 最近我们的angular项目部署,我们采用的的是Nginx,下面对Nginx做一个简单的介绍. 为什么选择Nginx 轻:相比于Apache,同样的web服务 ...

  4. 【nginx+tomcat集群】Nginx1.12.2+Tomcat7集群+负载均衡+Session共享

    今天想着将项目优化一下,就想的实现集群分布,在本机测试:利用nginx+tomcat实现 通过上一篇博客(http://www.cnblogs.com/qlqwjy/p/8535235.html),N ...

  5. linux+apache+nginx实现,反向代理动静分离

    在我们开发的过程中,一定会遇到,负载均衡方面的问题.下面我们,做一个小例子:使用nginx+apache实现反向代理,动静分离. 这里apache.php.nginx的安装就不做赘述了,不懂的朋友可以 ...

  6. Nginx动静分离负载均衡

    前期准备 使用Debian环境.安装Nginx(默认安装),一个web项目,安装tomcat(默认安装)等. Nginx.conf配置 # 定义Nginx运行的用户 和 用户组 如果对应服务器暴露在外 ...

  7. nginx 反向代理 和lvs负载均衡

    nginx反向代理:用户请求nginx代理服务器然后代理服务器将用户请求转为服务器再由nginx代理服务器将服务器的响应反应给用户. lvs负载均衡:用户请求nginx代理服务器然后代理服务器将用户请 ...

  8. nginx+tomcat反向代理下使用tomcat-redis-session-manager进行session共享中值得注意的一个问题

    公司目前项目使用nginx反向代理+多个tomcat进行负载均衡,之前使用ip_hash策略进行session控制.近期有考虑不再使用ip_hash策略,所以需要进行session共享. 根据项目实际 ...

  9. nginx+apache动静分离/负载均衡

    [主从] [Mysql-Master] log-bin=mysql-bin server-id = MariaDB [(none)]> grant replication slave on *. ...

随机推荐

  1. 如何删除Sitecore CMS中的项目

    在此“如何”帖子中,我将介绍如何删除项目以及如何在Sitecore CMS中恢复已删除的项目. 删除项目 有多种方便的方法可以删除Sitecore中的项目. 从功能区 在内容树中选择您要删除的项目. ...

  2. css选择问题

    <div class="col-lg-4 col-md-6 mb-4"> <div class="card"> <a href=& ...

  3. springboot用@Autowired和@PostConstruct注解把config配置读取到bean变成静态方法

    springboot用@Autowired和@PostConstruct注解把config配置读取到bean变成静态方法 @SpringBootApplication public class Sen ...

  4. Codeforce 814A - An abandoned sentiment from past (贪心)

    A few years ago, Hitagi encountered a giant crab, who stole the whole of her body weight. Ever since ...

  5. how to backup your system of Autel MS908 Pro

    how to backup your system of Autel Scan Tool Autel MS908 Pro: Connect the tablet to a PC desktop or ...

  6. webpack处理媒体文件(图片/视频和音频)

    webpack最终会将各个模块打包成一个文件,因此我们样式中的url路径是相对入口html页面的, 这个问题是用file-loader解决的,file-loader可以解析项目中的url引入(不仅限于 ...

  7. Mysql初级第二天(wangyun)

    SQL 1.LIKE 操作符 SELECT 列名称 FROM 表名称 WHERE 列 LIKE 值('N%'/'%N%'/'%N','N_') SELECT 列名称 FROM 表名称 WHERE 列 ...

  8. Spring AOP(基于代理类的AOP实现)

    #基于代理类的AOP实现:step1: 1 package com.sjl.factorybean; /**切面类*/ import org.aopalliance.intercept.MethodI ...

  9. 状态管理之cookie使用及其限制、session会话

    # 1.什么是状态管理? 将浏览器与web服务器之间多次交互当作一个整体来处理,并且将多次交互所涉及的数据(即状态)保存下来.(cookie浏览器所涉及到的访问数据保存下来)# 2.如何进行状态管理? ...

  10. ansible中常用模块详解

    ansible中常用的模块详解: file模块 ansible内置的可以查看模块用法的命令如下: [root@docker5 ~]# ansible-doc -s file - name: Sets ...