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网站服务如何配置防盗链(推荐)
Mar 31 Servers
nginx 反向代理之 proxy_pass的实现
Mar 31 Servers
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
Apr 04 Servers
Nginx下SSL证书安装部署步骤介绍
Dec 06 Servers
Windows Server 2012 修改远程默认端口3389的方法
Apr 28 Servers
IIS服务器中设置HTTP重定向访问HTTPS
Apr 29 Servers
Nginx 常用配置
May 15 Servers
nginx rewrite功能使用场景分析
May 30 Servers
linux目录管理方法介绍
Jun 01 Servers
Linux中各个目录的作用与内容
Jun 28 Servers
Linux安装Docker详细教程
Jul 07 Servers
Fluentd搭建日志收集服务
Sep 23 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 采集书并合成txt格式的实现代码
2009/03/01 PHP
PHP计算加权平均数的方法
2015/07/16 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
javascrip客户端验证文件大小及文件类型并重置上传
2011/01/12 Javascript
js如何实现设计模式中的模板方法
2013/07/23 Javascript
利用cookie记住背景颜色示例代码
2013/11/04 Javascript
javascript scrollTop正解使用方法
2013/11/14 Javascript
node.js中的socket.io入门实例
2014/04/26 Javascript
jQuery中[attribute]选择器用法实例
2014/12/31 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
jquery ajax局部加载方法详解(实现代码)
2016/05/12 Javascript
JavaScript知识点总结(六)之JavaScript判断变量数据类型
2016/05/31 Javascript
AngularJS 输入验证详解及实例代码
2016/07/28 Javascript
JavaScript装饰器函数(Decorator)实例详解
2017/03/30 Javascript
JS动画实现回调地狱promise的实例代码详解
2018/11/08 Javascript
Node.js系列之发起get/post请求(2)
2019/08/30 Javascript
vue 重塑数组之修改数组指定index的值操作
2020/08/09 Javascript
Python实现文件内容批量追加的方法示例
2017/08/29 Python
Python深度优先算法生成迷宫
2018/01/22 Python
python:print格式化输出到文件的实例
2018/05/14 Python
Python多继承原理与用法示例
2018/08/23 Python
Python实现京东秒杀功能代码
2019/05/16 Python
python变量命名的7条建议
2019/07/04 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
2019/08/13 Python
Django 简单实现分页与搜索功能的示例代码
2019/11/07 Python
Python中实现输入一个整数的案例
2020/05/03 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
2020/05/18 Python
HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)
2017/01/05 HTML / CSS
美国滑雪和滑雪板商店:Buckman
2018/03/03 全球购物
Blue Nile中国官网:全球知名的钻石和珠宝网络零售商
2020/03/22 全球购物
《灰椋鸟》教学反思
2014/04/27 职场文书
本科生求职信
2014/06/17 职场文书
努力学习保证书
2015/02/26 职场文书
python 实现体质指数BMI计算
2021/05/26 Python
Nginx实现负载均衡的项目实践
2022/03/18 Servers