Nginx+Tomcat实现负载均衡、动静分离的原理解析


Posted in Servers onMarch 31, 2021

一、Nginx 负载均衡实现原理

1、Nginx 实现负载均衡是通过反向代理实现

反向代理(Reverse Proxy) 是指以 代理服务器(例:Nginx) 来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器(例:Tomcat),并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器(例:Nginx)对外就表现为一个反向代理服务器。
我们从客户端的视野来看,实际上客户端并不知道真实的服务提供者是哪台服务器,它只知道它请求了反向代理服务器。因此反向代理这种方式又对外隐藏了真实服务器的地址,从一定程度上降低了安全隐患。

2、Nginx 配置反向代理的主要参数 upstream 服务池名 {}

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

proxy_pass http:// 服务池名

作用:配置将访问请求转发给后端服务器池的服务器处理

二、Nginx 动静分离实现原理

1、动静分离原理

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

2、Nginx 静态处理优势

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

三、Nginx + Tomcat 动静分离、负载均衡配置步骤 环境准备

 

主机 操作系统 IP地址 所需软件
Nginx Server CentOS7 192.168.109.7 nginx-1.12.0.tar.gz
Tomcat Server1 CentOS7 192.168.109.22 apache-tomcat-9.0.16.tar.gz、jdk-8u201-linux-x64.rpm
Tomcat Server2 CentOS7 192.168.109.23 apache-tomcat-9.0.16.tar.gz、jdk-8u201-linux-x64.rpm

1、部署 Nginx 负载均衡服务器

Nginx+Tomcat实现负载均衡、动静分离的原理解析

#!/bin/bash
#脚本说明:编译安装nginx服务
#注意:使用前请将nginx-1.12.0.tar.gz放入/opt目录下

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

#安装所需开发包和编译环境、编译器
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make

#创建程序用户,便于准确控制访问
useradd -M -s /sbin/nologin nginx

#解压安装包
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/

#编译安装nginx;指定安装路径、指定用户名、组名、启用模块以支持统计状态
cd /opt/nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-file-aio --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module

make && make install

#软链接便于系统识别nginx操作命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

#添加nginx系统服务
echo '[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target' > /lib/systemd/system/nginx.service

#赋权及开启服务、开启开机自启
chmod 754 /lib/systemd/system/nginx.service
systemctl restart nginx.service
systemctl enable nginx.service

Nginx+Tomcat实现负载均衡、动静分离的原理解析
Nginx+Tomcat实现负载均衡、动静分离的原理解析

2、部署两台 Tomcat 应用服务器

Nginx+Tomcat实现负载均衡、动静分离的原理解析

#!/bin/bash
#安装Tomcat服务

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

#安装JDK
cd /opt
rpm -ivh jdk-8u201-linux-x64.rpm

#设置JDK环境变量
echo 'export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH' > /etc/profile.d/java.sh

source /etc/profile

#安装并启动Tomcat
cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
/usr/local/tomcat/bin/startup.sh

Nginx+Tomcat实现负载均衡、动静分离的原理解析

3、动静分离配置

请看tomcat

1)Tomcat1 server 配置

mkdir /usr/local/tomcat/webapps/test

#配置动态页面
vim /usr/local/tomcat/webapps/test/index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("动态页面 1:www.test1.com");%>
</body>
</html>

Nginx+Tomcat实现负载均衡、动静分离的原理解析

#修改配置文件
vim /usr/local/tomcat/conf/server.xml
<Host name="192" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" />
</Host>

/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

Nginx+Tomcat实现负载均衡、动静分离的原理解析
Nginx+Tomcat实现负载均衡、动静分离的原理解析

2)Tomcat2 server 配置

mkdir /usr/local/tomcat/webapps/test

vim /usr/local/tomcat/webapps/test/index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>
</head>
<body>
<% out.println("动态页面 1:www.test2.com");%>
</body>
</html>

Nginx+Tomcat实现负载均衡、动静分离的原理解析

#修改配置文件
vim /usr/local/tomcat/conf/server.xml
<Host name="192" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" />
</Host>

/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

Nginx+Tomcat实现负载均衡、动静分离的原理解析
Nginx+Tomcat实现负载均衡、动静分离的原理解析

3)Nginx server 配置

#准备静态页面和静态图片
echo '<html><body><h1>this is static</h1></body></html>' > /usr/local/nginx/html/index.html
mkdir /usr/local/nginx/html/long
cd /usr/local/nginx/html/long

Nginx+Tomcat实现负载均衡、动静分离的原理解析

vim /usr/local/nginx/conf/nginx.conf
......
http {
......
#gzip on;

upstream tomcat_server {
  server 192.168.109.22:8080 weight=1;
  server 192.168.109.23:8080 weight=1;
}

server {
	listen 80;
	server_name www.long.com;

  #charset koi8-r;

	#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;
	}
    
  #配置Nginx处理静态图片请求
	location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
		root /usr/local/nginx/html/img/;
		expires 10d;
	}
    location / {
      root html;
      index index.html index.htm;
    }


systemctl restart nginx.service

Nginx+Tomcat实现负载均衡、动静分离的原理解析
Nginx+Tomcat实现负载均衡、动静分离的原理解析

Nginx+Tomcat实现负载均衡、动静分离的原理解析

4、访问测试

测试静态页面效果
浏览器访问 http://192.168.109.7/
浏览器访问 http://192.168.109.7/long.jpg

Nginx+Tomcat实现负载均衡、动静分离的原理解析

测试负载均衡效果,不断刷新浏览器测试
浏览器访问 http://192.168.109.7/test/index.jsp

Nginx+Tomcat实现负载均衡、动静分离的原理解析
Nginx+Tomcat实现负载均衡、动静分离的原理解析

到此这篇关于Nginx+Tomcat实现负载均衡、动静分离的原理解析的文章就介绍到这了,更多相关Nginx负载均衡、动静分离内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!


Tags in this post...

Servers 相关文章推荐
nginx location优先级的深入讲解
Mar 31 Servers
Nginx解决403 forbidden的完整步骤
Apr 01 Servers
使用Nginx搭载rtmp直播服务器的方法
Oct 16 Servers
苹果M1芯片安装nginx 并且部署vue项目步骤详解
Nov 20 Servers
Nginx 反向代理解决跨域问题多种情况分析
Jan 18 Servers
Linux中如何安装并部署Redis
Apr 18 Servers
微信告警的zabbix监控系统 监控整个NGINX集群
Apr 18 Servers
nginx容器方式反向代理实战
Apr 18 Servers
Windows Server 2019 配置远程控制以及管理方法
Apr 28 Servers
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
Apr 29 Servers
Nginx文件已经存在全局反向代理问题排查记录
Jul 15 Servers
Shell中的单中括号和双中括号的用法详解
Dec 24 Servers
使用nginx动态转换图片大小生成缩略图
Mar 31 #Servers
Nginx反向代理多个服务器的实现方法
基于nginx实现上游服务器动态自动上下线无需reload的实现方法
为什么 Nginx 比 Apache 更牛逼
Mar 31 #Servers
Nginx的rewrite模块详解
Mar 31 #Servers
nginx常用命令放入shell脚本详解
Mar 31 #Servers
详解如何修改nginx的默认端口
You might like
PHP安全配置
2006/12/06 PHP
php更改目录及子目录下所有的文件后缀扩展名的代码
2010/10/12 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
2015/10/23 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
2017/10/13 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
ThinkPHP中图片按比例切割的代码实例
2019/03/08 PHP
yii2的restful api路由实例详解
2019/05/14 PHP
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
2011/03/10 Javascript
ECMAScript 创建自己的js类库
2012/11/22 Javascript
JavaScript进阶练习及简单实例分析
2016/06/03 Javascript
JavaScript实现移动端滑动选择日期功能
2016/06/21 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
基于iscroll.js实现下拉刷新和上拉加载效果
2016/11/28 Javascript
ES6新特性六:promise对象实例详解
2017/04/21 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
vue插槽slot的理解和使用方法
2019/04/03 Javascript
[41:41]TFT vs Secret Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
Python中装饰器学习总结
2018/02/10 Python
Numpy数组的保存与读取方法
2018/04/04 Python
Python DataFrame.groupby()聚合函数,分组级运算
2018/09/18 Python
python write无法写入文件的解决方法
2019/01/23 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
django 使用全局搜索功能的实例详解
2019/07/18 Python
python实现扫雷游戏的示例
2020/10/20 Python
python 获取剪切板内容的两种方法
2020/11/28 Python
css3实现多个元素依次显示效果
2017/12/12 HTML / CSS
生物科学系大学生的自我评价
2013/12/20 职场文书
国旗下演讲稿
2014/05/08 职场文书
四查四看自我剖析材料
2014/09/19 职场文书
群众路线调研报告范文
2014/11/03 职场文书
2014年底工作总结
2014/12/15 职场文书
优秀少先队辅导员事迹材料
2014/12/24 职场文书
关于五一放假的通知
2015/08/18 职场文书
Python基础知识之变量的详解
2021/04/14 Python
Oracle11g R2 安装教程完整版
2021/06/04 Oracle
不同品牌、不同型号对讲机如何互相通联
2022/02/18 无线电