cyn's blog cyn's blog
首页
  • java开发知识
  • 开发问题记录
  • 计算机网络
  • 数据结构与算法
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 实用技巧
个人简历
GitHub (opens new window)
首页
  • java开发知识
  • 开发问题记录
  • 计算机网络
  • 数据结构与算法
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 实用技巧
个人简历
GitHub (opens new window)
  • java技术

    • Java 快读快输出
    • 自定义比较器
    • session和token有什么区别?
    • HashMap为什么比数组查询快
    • int和Integer区别详解
    • String和StringBuffer
    • 接口和抽象类区别
    • 小数计算都是不精确的
    • 判断数组、字符串、集合为空和null
    • 布隆过滤器
    • Java实体类实现Serializable接口?(序列化)
    • java.util.Arrays.asList()
    • URI_URL
    • volatile和synchronized的区别
    • Nginx+Tomcat实现负载均衡、动静分离集群
    • nginx常用命令
  • 开发问题记录

    • 关闭端口号占用的进程
    • 前后端跨域问题
    • java调用外部程序Runtime.getRuntime().exec
    • 静态资源映射,访问、上传到服务器本地
  • java开发
  • java技术
cyn
2023-05-26

Nginx+Tomcat实现负载均衡、动静分离集群

一、Nginx负载均衡原理

Nginx服务器作为前端,Tomcat服务器作为后端,web页面请求由Nginx服务来进行转发。

但是不是把所有的web请求转发,而是将静态页面请求Nginx服务器自己来处理,动态页面请求,转发给后端的Tomcat服务器来处理。

Tomcat是属于轻量级的应用服务器,可接受访问量可能会不足,所以我们需要多台Tomcat服务器,然后通过Nginx配置权重来进行挑选Tomcat服务器去进行处理,负载均衡的一种策略。

Nginx服务器

1、首页使用精准匹配 2、静态页面使用正则匹配自己处理 3、动态页面使用正则匹配jsp结尾的请求,使用proxy_pass转发给Tomcat服务器

1)Nginx静态处理优势

Nginx处理静态页面的效率远高于Tomcat的处理能力 若Tomcat的请求量为1000次,则Nginx的请求量为6000次 Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3 .6M Nginx处理静态资源的能力是Tomcat处理的6倍

二、Nginx动静分离原理

服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源有Nginx提供服务,动态资源Nginx转发至后端。

二、Nginx配置反向代理主要参数

配置后端服务器池,以提供响应数据

upstream 服务器名 {}
1

配置将访问请求转发给后端服务器池名

proxy_pass http://服务器名
1

三、实验(图文详解)

1、Nginx+Tomcat负载均衡、动静分离

2、Nginx作为负载均衡器,Tomcat作为应用服务器

3、所需安装包:nginx-1.12.0.tar.gz / apache-tomcat-9.0.16.tar.gz / jdk-8u201-linux-x64.rpm

1.编译安装Nginx

2.部署2台Tomcat 应用服务器

3.动静分离配置

1)Tomcat Server1 配置

mkdir /usr/local/tomcat/webapps/accpvim /usr/local/tomcat/webapps/accp/index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><html><head><title>JSP test2 page</title></head><body><% out.println("动态页面:this is server1");%></body></html>vim /usr/local/tomcat/conf/server.xml<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context docBase="/usr/local/tomcat/webapps/accp" path="" reloadable="true" /></Host>#重启tomcat/usr/local/tomcat/bin/shutdown.sh /usr/local/tomcat/bin/startup.sh
1

2)Tomcat Server2 配置

mkdir /usr/local/tomcat/webapps/accpvim /usr/local/tomcat/webapps/accp/index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><html><head><title>JSP test2 page</title></head><body><% out.println("动态页面:this is server2");%></body></html>vim /usr/local/tomcat/conf/server.xml<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context docBase="/usr/local/tomcat/webapps/accp" path="" reloadable="true" /></Host>/usr/local/tomcat/bin/shutdown.sh /usr/local/tomcat/bin/startup.sh
1

4.Nginx server 配置

#准备静态页面和静态图片
echo '<html><body><h1>这是默认目录静态页面</h1></body></html>' > /usr/local/nginx/html/index.html
mkdir /usr/local/nginx/html/accp #图片的存放目录
1
2
3
#配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大

vim /usr/local/nginx/conf/nginx.conf

......
http {
  ......
    #gzip on;

    upstream tomcat_server {  #反向代理模块,定义后端服务器http模块内,server模块外添加
    server 192.168.190.12:8080 weight=1;
    server 192.168.190.13:8080 weight=1;
  }

  server {
    listen 80;
    server_name www.accp.com; #监听地址

    charset utf-8;

    #access_log logs/host.access.log main;

    #配置Nginx处理动态页面请求,将 .jsp文件请求转发到Tomcat 服务器处理
    location ~ .*.jsp$ {
      proxy_pass http://tomcat_server; 
      proxy_set_header HOST $host;  

      proxy_set_header X-Real-IP $remote_addr;        
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
    }
#root用于定义根目录位置
    #配置Nginx处理静态图片请求
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
      root /usr/local/nginx/html/accp;
      expires 10d;
    }

 #80端口直接到首页,这个/要放在最下面
   location / {
       root   html/abcvue;                   #abcvue是vue项目打包
       index  index.html index.htm;
       try_files $uri $uri/ =404;     #处理刷新后404
   }

systemctl restart nginx.service 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
编辑 (opens new window)
上次更新: 2023/05/26, 15:58:27
volatile和synchronized的区别
nginx常用命令

← volatile和synchronized的区别 nginx常用命令→

Theme by Vdoing | Copyright © 2023-2023 cyn | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式