nginx反向代理做负载均衡以及使用redis实现session共享配置详解

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 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,比较简单,不做过多赘述,下面是正确安装后的目录结构


微信图片_20221110170039.png

访问localhost:80,可以看到如下界面:

微信图片_20221110170119.png

3.2 进行反向代理配置


     在conf目录中找到nginx.conf文件。用记事本打开,可以看到如下配置:

微信图片_20221110170143.png

  我们之所有直接通过localhost:80能访问到页面就是因为这段配置


 很明显listen代表的是nginx监听的端口,server_name代表ip或者域名,location / {..}这段配


置代表默认主页,最后一段配置代表的是错误页面。


   然后介绍下反向代理的配置(以配置tomcat的反向代理为例),如下:

20180705003040357.png

配置完成后我们会发现,现在直接访问localhost:80时显示的不是之前的页面了,而是tomcat的主


页,这样我们就完成了反向代理,当用户访问时,我们通过nginx从tomcat取得数据并返回给用户,


这就是通过nginx完成反向代理。


4.怎么用nginx实现负载均衡


如果理解了反向代理的配置,这个配置就很简单了。具体配置如下:

微信图片_20221110170250.png

可以看到其他的配置都没有变,只不过在之前反向代理的列表中多加了一个tomcat的访问路径。

在测试的时候发现nginx服务器一直无法启动,然后在错误日志中查了下发现:

微信图片_20221110170320.png


//

实际上上面的配置  weigth后应该有个等号,修改后如下:

微信图片_20221110170340.png

这样一来,每当客户访问localhost:80(nginx服务器时),nginx服务器会随机将请求分发给列表中的


tomcat进行处理,这样我们就完成了对基于nginx负载均衡的配置


5.但是完成负载均衡后,问题又来了,session怎么办?我们总不能每分配


一次服务器就让用户登陆一次吧?这个就是session共享问题

其实解决session共享问题的方案很多,我这里只给出一种,就是使用redis实现session共享,核心思想就是:


将每个tomcat独立管理的session统一存储到redis中管理.大致原理图如下:

微信图片_20221110170401.png

骤如下:

1.下载nginx+tomcat集群+redis实现session共享工具包,下载地址

https://github.com/jcoleman/tomcat-redis-session-manager/downloads

2.其他需要的依赖

微信图片_20221110170431.png

将以上四个包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分钟),这一点很重要。



相关文章
|
2月前
|
编解码 应用服务中间件 Linux
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
296 1
|
2月前
|
存储 NoSQL 前端开发
Redis专题-实战篇一-基于Session和Redis实现登录业务
本项目基于SpringBoot实现黑马点评系统,涵盖Session与Redis两种登录方案。通过验证码登录、用户信息存储、拦截器校验等流程,解决集群环境下Session不共享问题,采用Redis替代Session实现数据共享与自动续期,提升系统可扩展性与安全性。
228 3
Redis专题-实战篇一-基于Session和Redis实现登录业务
|
2月前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
257 18
|
2月前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
318 17
|
3月前
|
数据建模 应用服务中间件 PHP
配置nginx容器和php容器协同工作成功,使用ip加端口的方式进行通信
本示例演示如何通过Docker挂载同一宿主目录至Nginx与PHP容器,实现PHP项目运行环境配置。需注意PHP容器中监听地址修改为0.0.0.0:9000,并调整Nginx配置中fastcgi_pass指向正确的IP与端口。同时确保Nginx容器中/var/www/html权限正确,以避免访问问题。
配置nginx容器和php容器协同工作成功,使用ip加端口的方式进行通信
|
4月前
|
应用服务中间件 网络安全 nginx
配置Nginx以支持Websocket连接的方法。
通过上述配置,Nginx将能够理解WebSocket协议的特殊要求,代理Websocket流量到合适的后端服务器。注意,Websocket并不是HTTP,尽管它最初是通过HTTP请求启动的连接升级,因此保证Nginx了解并能够妥善处理这种升级流程是关键。
1059 10
|
3月前
|
Ubuntu 应用服务中间件 Linux
在Ubuntu上配置Nginx实现开机自启功能
至此,Nginx应该已经被正确地设置为开机自启。在Ubuntu中利用 `systemd`对服务进行管理是一种高效的方式,为系统管理员提供了强大的服务管理能力,包括但不限于启动、停止、重启服务,以及配置服务的开机自启动。通过这些简洁的命令,即使是对Linux不太熟悉的用户也能轻松地进行配置。
178 0
|
6月前
|
应用服务中间件 Linux 网络安全
Centos 8.0中Nginx配置文件和https正书添加配置
这是一份Nginx配置文件,包含HTTP与HTTPS服务设置。主要功能如下:1) 将HTTP(80端口)请求重定向至HTTPS(443端口),增强安全性;2) 配置SSL证书,支持TLSv1.1至TLSv1.3协议;3) 使用uWSGI与后端应用通信(如Django);4) 静态文件托管路径设为`/root/code/static/`;5) 定制错误页面(404、50x)。适用于Web应用部署场景。
720 87
|
6月前
|
负载均衡 应用服务中间件 nginx
Nginx配置与命令
Nginx 是一款高性能的 HTTP 和反向代理服务器,其配置文件灵活且功能强大。本文介绍了 Nginx 配置的基础结构和常用指令,包括全局块、Events 块、HTTP 块及 Server 块的配置方法,以及静态资源服务、反向代理、负载均衡、HTTPS 和 URL 重写等功能实现。此外,还提供了常用的 Nginx 命令操作,如启动、停止、重载配置和日志管理等,帮助用户高效管理和优化服务器性能。
|
5月前
|
安全 应用服务中间件 网络安全
Nginx SSL/TLS协议栈中配置深度解析与实践指南-优雅草卓伊凡
Nginx SSL/TLS协议栈中配置深度解析与实践指南-优雅草卓伊凡
359 0
Nginx SSL/TLS协议栈中配置深度解析与实践指南-优雅草卓伊凡
下一篇
oss云网关配置