文章目录
本章目标
- nginx反向代理均衡
- 分布式会话管理
- 使用redis实现分布式会话存储
4-1 Nginx反向代理
上一章我们看到当单机系统时候,容量有限,响应时间变长TPS上不去的问题。nginx反向代理的功能就是代理后端Tomcat服务器集群,以统一域名方式来访问
- 单机容量问题,水平扩展
- nginx反向代理
- 负载均衡配置
当我们用
top -H命令查询cpu运行状况时,单机运行很卡,表象是cpu使用率增高,内存memory占用增加,网络带宽使用增加,有几个参数值得注意

- cpu us : 用户空间cpu使用情况(用户态进程占比)
- cpu sy:内核空间cpu使用情况(核心态进程占比)
- load average:1分钟/5分钟/15分钟负载load平均值,跟着核系数变化,0表示正常,1表示cpu打满,1+代表等待阻塞
- memory:free 空闲内存,used使用内存
4-2 单机容量问题,水平扩展
这次的水平扩展指的是对应用系统程序扩展,而mysql数据库只有一个,用来开放远端连接(mysql读写分离、分库分表等方法可实现mysql水平扩展,这里没讨论),服务端实现水平对称部署,最后验证访问
Nginx系统框图如下:
我们在阿里云就需要4台服务器(其中1台用作数据库,2台用作应用进程,1台用作nginx反向代理)
4-3修改前端资源用于部署nginx
nginx有三种用途:
- 使用nginx作为web服务器(静态资源访问)
- 使用nginx作为动静分离服务器
- 使用nginx作为反向代理服务器(动态资源请求)

整个项目前端H5请求的类型有两种,一种是静态资源,一种是ajax请求动态资源。对于ajax向域名miaoshaserver请求时,mginx会作为反向代理部署到不同miaosha项目jar包下;而对于静态资源(static,HTML,CSS等)访问域名miaoshaserver/resources时,nginx会向本地磁盘请求资源(企业级应用通常使用的是NAS)
那先部署静态资源请求:
在static静态资源目录下新建gethost.js,用来方便配置修改远端连接地址,然后在每个页面上对应修改,然后将静态资源上传到服务器上
4-4 部署Nginx OpenResty
使用Nginx的框架OpenResty来开发配置Nginx,OpenResty是基于NGINX和LuaJIT的动态Web平台。优点是可以支持lua的一些开发。
将nginx指定成web服务器
- location节点path :指定url映射key
- location节点内容:root指定location path后对应的根路径,index指定默认的访问页
- sbin/nginx -c conf/nginx.conf启动
- 修改配置后直接
sbin/nginx -s reload无缝重启
访问nginx服务器ip地址,出现welcome to OpenResty 则成功😄
4-5/6 前端资源部署
-
scp 指令将htmlStable文件夹上传到//usr/local/openresty/nginx/html目录下
-
修改本地hosts文件指定nginx的IP地址域名为miaoshaserver
-
修改nginx目录下conf文件:

当我们浏览器访问miaoshaserver/resources/…时,访问的是/usr/local/openresty/nginx/html/resources/目录下的静态资源文件,做到H5请求静态资源到nginx服务器
- 使用
sbin/nginx -s reload无缝重启,指的是修改nginx配置文件后不需要重启nginx服务器,连接不会断,只变化了进程号

可以看到执行命令前后 master进程不改变,worker进程的进程号变化
4-7 Nginx配置动静分离服务器
location 节点path特定resources : 静态资源路径
location节点其他路径:动态资源用
-
设置upstream server
-
设置动态请求location为proxy pass 路径
-
开启tomcat access log 验证
设置upstream server
修改/usr/local/openresty/nginx/conf/nginx.conf文件
添加以下内容:配置两个应用服务器以轮询的方式 权重1:1来执行负载均衡

添加其他路径访问,设置动态请求location为proxy pass 路径:

开启tomcat access log来验证反向代理是否成功,虽然开启日志要消耗一定的性能,但tomcat采用的是异步队列
在application.properties中添加:

%h表示远端host地址(远端IP地址)
%l 默认返回-
%u 表示远端主机user
%t 表示处理时间
%r 打印请求的方法/url
%s HTTP返回状态码
%b 表示请求response的大小
%D 表示处理请求时长
在miaosha/下面新建文件夹tomcat,授权所有权限sudo chmod 777 tomcat/,这个文件夹作为nginx代理请求的日志文件地址
刷新网页,发现多了一个access_log文件 tail -f access_log查看

表示 远端主机为172,26.241.152(应用服务器2)的请求,GET请求,返回码200,返回response大小32,处理时间4ms
4-8 分布式扩展后的性能压测
分布式扩展后,我们测试一下压测前后的性能,设置线程数1000,循环2

本文详细介绍了如何利用Nginx进行反向代理和负载均衡,解决单机容量问题。通过部署Nginx OpenResty,实现动静分离,并探讨了Nginx的高性能原因,如epoll多路复用。此外,文章还讨论了分布式会话管理,包括基于cookie和token的实现,以及如何将session存储在Redis中以适应分布式系统。
最低0.47元/天 解锁文章
3007

被折叠的 条评论
为什么被折叠?



