nginx反向代理做负载均衡以及使用redis实现session共享配置详解
1.为什么要用nginx做负载均衡?
首先我们要知道用单机tomcat做的网站,比较理想的状态下能够承受的并发访问在150到200,
按照并发访问量占总用户数的5%到10%技术,单点tomcat的用户人数在1500到4000左右。这样显
然是不够的,为了解决这个问题我们就可以采用负载均衡的方法。
1.1为什么采用nginx?
成本低,不同于硬负载,成本基本为0。
nginx能够支持高达50000个并发连接数的响应
2.什么是反向代理?反向代理与正向代理的区别
这里不多赘述了,比较简单,大家可以参考文章:
https://blog.csdn.net/m13666368773/article/details/8060481
3.nginx如何实现反向代理?
3.1正确安装nginx,比较简单,不做过多赘述,下面是正确安装后的目录结构
首先双击执行nginx,执行后在任务管理器中查看进程,如果有如下两个进程说明ngnix服务器已正常启动
访问localhost:80,可以看到如下界面:
3.2 进行反向代理配置
在conf目录中找到nginx.conf文件。用记事本打开,可以看到如下配置:
我们之所有直接通过localhost:80能访问到页面就是因为这段配置
很明显listen代表的是nginx监听的端口,server_name代表ip或者域名,location / {..}这段配
置代表默认主页,最后一段配置代表的是错误页面。
然后介绍下反向代理的配置(以配置tomcat的反向代理为例),如下:
配置完成后我们会发现,现在直接访问localhost:80时显示的不是之前的页面了,而是tomcat的主
页,这样我们就完成了反向代理,当用户访问时,我们通过nginx从tomcat取得数据并返回给用户,
这就是通过nginx完成反向代理。
4.怎么用nginx实现负载均衡
如果理解了反向代理的配置,这个配置就很简单了。具体配置如下:
可以看到其他的配置都没有变,只不过在之前反向代理的列表中多加了一个tomcat的访问路径。
在测试的时候发现nginx服务器一直无法启动,然后在错误日志中查了下发现:
实际上上面的配置 weigth后应该有个等号,修改后如下:
这样一来,每当客户访问localhost:80(nginx服务器时),nginx服务器会随机将请求分发给列表中的
tomcat进行处理,这样我们就完成了对基于nginx负载均衡的配置
5.但是完成负载均衡后,问题又来了,session怎么办?我们总不能每分配
一次服务器就让用户登陆一次吧?这个就是session共享问题
其实解决session共享问题的方案很多,我这里只给出一种,就是使用redis实现session共享,核心思想就是:
将每个tomcat独立管理的session统一存储到redis中管理.大致原理图如下:
步骤如下:
1.下载nginx+tomcat集群+redis实现session共享工具包,下载地址
https://github.com/jcoleman/tomcat-redis-session-manager/downloads
2.其他需要的依赖
将以上四个包copy到tomcat的lib目录下(集群中的所有Tomcat都需要有这四个jar)
3.在tomcat/conf/context.xml文件中添加配置(集群中的所有Tomcat都需要配置)
注意:
1.按照如上配置,使用redis数据库,放入session中的对象必须要实现java.io.Serializable接口,使用memcache的可以不用实现Serializable接口
原因是:因为tomcat里使用的将session放置redis使用的工具类,是使用的jdk序列化模式存储的,这一点也是很容易理解的,session.setAttribute(String key, Object value),存储Object类型
object放入redis中又要能取出来,只能是序列化进行存储了,然后取出的时候进行反序列化。
所以我们在session中存储的任何对象,都必须实现序列化接口。
2.按照如上配置,使用redis做session存储空间时,web应用的session-time的时间单位会变成[秒],而不是原本的[分]
原因是:因为tomcat里使用的将session放置redis使用的工具类,在存储时为对tomcat容器时间做转换,
在redis中设置过期时间是使用秒作为单位的,有个命令叫expire可以设置redis键值过期时间,所以在context.xml配置文件中我们需要制定session过期时间(默认是60秒,配成1800即30分钟),这一点很重要。
nginx反向代理做负载均衡以及使用redis实现session共享配置详解的更多相关文章
- nginx反向代理、负载均衡以及分布式下的session保持
[前言]部署服务器用到了nginx,相比较于apache并发能力更强,优点也比其多得多.虽然我的项目可能用不到这么多性能,还是部署一个流行的服务器吧! 此篇博文主要学习nginx(ingine x)的 ...
- Nginx反向代理,负载均衡,redis session共享,keepalived高可用
相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...
- 【转】Nginx反向代理和负载均衡
原文链接:http://www.cnblogs.com/shuoer/p/7820899.html Nginx反向代理和负载均衡 环境说明 由于我使用的是windows系统,所以我用虚拟机虚拟出来了3 ...
- 谁说前端不需要懂-Nginx反向代理与负载均衡
转:https://juejin.im/post/5b01336af265da0b8a67e5c9 学到老活到老 前端圈一直很新,一直要不停的学习,而且在进入大厂的路上,还要求熟悉一门后台语言等等.用 ...
- 基于Nginx反向代理及负载均衡
基于Nginx反向代理及负载均衡 参考:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass 只要没有被启用,默认就是 ...
- (二)Nginx反向代理与负载均衡的实现
引言:nginx正向代理与反向代理在上一篇文章中已经谈论过,这里狗尾草主要告诉大家Nginx对前端的小伙伴来说在工作中如何简单的使用. 1.0什么是反向代理 当我们有一个服务器集群,并且服务器集群中的 ...
- Nginx反向代理与负载均衡应用实践(二)
Nginx反向代理与负载均衡应用实践(二) 链接:https://pan.baidu.com/s/1xB20bnuanh0Avs4kwRpSXQ 提取码:migq 复制这段内容后打开百度网盘手机App ...
- Nginx反向代理与负载均衡应用实践(一)
Nginx反向代理与负载均衡应用实践(一) 链接:https://pan.baidu.com/s/1xB20bnuanh0Avs4kwRpSXQ 提取码:migq 复制这段内容后打开百度网盘手机App ...
- Nginx反向代理实现负载均衡配置图解
Nginx反向代理实现负载均衡配置图解 [导读] 负载均衡配置是超大型机器需要考虑的一些问题,同时也是数据安全的一种做法,下面我来介绍在nginx中反向代理 负载均衡配置图解,大家可参考本文章来操作. ...
随机推荐
- AJ学IOS 之CoreLocation反地理编码小Demo输入经纬度得到城市
AJ分享,必须精品 一:效果 输入经纬度,可以得到相应的地名 二:思路 跟地里编码差不多 1.获取用户输入的经纬度 2.根据用户输入的经纬度创建CLLocation对象 3.根据CLLocation对 ...
- kworkerds 挖矿木马简单分析及清理
公司之前的开发和测试环境是在腾讯云上,部分服务器中过一次挖矿木马 kworkerds,本文为我当时分析和清理木马的记录,希望能对大家有所帮助. 现象 top 命令查看,显示 CPU 占用 100%,进 ...
- Python语言-selenium webdriver操作记录汇总
1.控制浏览器大小 set_window_size() 设置浏览器大小 该方法有两个参数,第一个参数是宽,第二个是高 maximize_window() 设置浏览器全屏显示,无参数 chrome谷歌浏 ...
- C - N皇后问题 DFS
在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上. 你的任务是,对于给定的N,求出有多少种合法的放置方法. Inpu ...
- 吊打面试官系列:Redis 性能优化的 13 条军规大全
1.缩短键值对的存储长度 键值对的长度是和性能成反比的,比如我们来做一组写入数据的性能测试,执行结果如下: 从以上数据可以看出,在 key 不变的情况下,value 值越大操作效率越慢,因为 Redi ...
- P1464 Function
Function 简 单 的 递 归 这道题一开始十分智障地用递归做,虽然知道没那么简单,但还是冒着送死的心态交了一遍,果然,如我所料 样例输入: 密密麻麻,几万行的样例输入 //:) ...
- ASP.Net内置对象之网页之间传参(一)
Response对象 主要运用于数据从服务器发送到浏览器,可以输出数据.页面跳转.各个网页之间传参数等操作. 以下讲解几个常用例子: 在页面中输出数据 主要通过Write .WriteFile方法输出 ...
- python中文语料分词处理,按字或者词cut_sentence
cut_sentence.py import string import jieba import jieba.posseg as psg import logging #关闭jieba日制 jieb ...
- 易学又实用的新特性:for...of
今天带来的知识点既简单又使用,是不是感觉非常的棒啊,OK,不多说了,咱们开始往下看. for...of 是什么 for...of 一种用于遍历数据结构的方法.它可遍历的对象包括数组,对象,字符串,se ...
- 2019-2020-1 20199328《Linux内核原理与分析》第三周作业
加载内核 这里可以看出有些东西隔一段时间就会打印出来 查看mymain.c 开头的一些语句不再描述 每10000次循环打印一次 这里还是针对的mymain.c文件,这里我们可以根据自己的计算机对频率进 ...