NGINX+Tomcat负载均衡、动静分离集群

目录

前言

一、NGINX正向代理与反向代理

1.1、NGINX正向代理

1.2、NGINX反向代理

1. 2.1Nginx配置反向代理的主要参数

二、负载均衡

三、NGINX动静分离集群

3.1动静分离原理

 四、Nginx+Tomcat动静分离

4.1搭建nginx代理服务器192.168.14.100

4.1.1安装 NGINX依赖环境

4.1.2创建程序用户

4. 1.3解包

 4.1.4选择安装,并开启相应的模块

 4.1.5编译并安装

4.1.6创建软连接

4.1.7配置nginx.service

4.2部署1Tomcat 应用服务器 192.168.14.101

4.2.1解包jdk

4.2.2配置全局变量

4.2.3解压Apache

 4.2.4启动shell文件

4.2.5查看Tomcat是否启动

4.2部署2Tomcat 应用服务器 192.168.14.102

 第一步、先安装包文件

第二步、将该文件解包 

 第三步、配置全局变量

 第四步、将两个Tomcat路径换一下

第五步、开启Tomcat服务

第六步、 Tomcat1 server 192.168.14.102配置

第六步 Tomcat2 server 配置 192.168.14.103

 第七步、Nginx server 配置 ,准备静态页面和静态图片

第八步、配置nginx.conf

最后,测试一下

 总结


前言

Tomcat 是 Java 语言开发的,Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,是 Apache 软件基金会的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成。 Tomcat 属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。一般来说,Tomcat 虽然和 Apache 或者 Nginx 这些 Web 服务器一样,具有处理 HTML 页面的功能,然而由于其处理静态 HTML 的能力远不及 Apache 或者 Nginx,所以 Tomcat 通常是作为一个 Servlet 和 JSP 容器,单独运行在后端。

一、NGINX正向代理与反向代理

1.1、NGINX正向代理

 正向代理,指的是通过代理服务器代理浏览器/客户端去重定向请求访问到目标服务器的一种代理服务。
正向代理服务的特点是代理服务器代理的对象是浏览器/客户端,也就是对于目标服务器来说浏览器/客户端是隐藏的。

1.2、NGINX反向代理

 浏览器/客户端并不知道自己要访问具体哪台目标服务器,只知道去访问代理服务器 ,代理服务器再通过反向代理 +负载均衡实现请求分发到应用服务器的一种代理服务。
反向代理服务的特点是代理服务器 代理的对象是应用服务器,也就是对于浏览器/客户端 来说应用服务器是隐藏的。

1. 2.1Nginx配置反向代理的主要参数

  • upstream 服务池名{}
    • 配置后端服务器池,以提供响应数据
  • proxy_pass http://服务池名
    • 配置将访问请求转发给后端服务器池的服务器处理

二、负载均衡

根据分流算法把不同的请求转发到不同的服务器上

三、NGINX动静分离集群

3.1动静分离原理

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

 四、Nginx+Tomcat动静分离

4.1搭建nginx代理服务器192.168.14.100

4.1.1安装 NGINX依赖环境

4.1.2创建程序用户

4. 1.3解包

 4.1.4选择安装,并开启相应的模块

cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-file-aio \									#启用文件修改支持
--with-http_stub_status_module \					#启用状态统计
--with-http_gzip_static_module \					#启用 gzip静态压缩
--with-http_flv_module \							#启用 flv模块,提供对 flv 视频的伪流支持
--with-http_ssl_module	\							#启用 SSL模块,提供SSL加密功能
--with-stream										#启用 stream模块,提供4层调度

 4.1.5编译并安装

make && make install

4.1.6创建软连接

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

4.1.7配置nginx.service

vim /lib/systemd/system/nginx.service
[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.targetchmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

4.2部署1Tomcat 应用服务器 192.168.14.101

4.2.1解包jdk

tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/

4.2.2配置全局变量

 

4.2.3解压Apache

 4.2.4启动shell文件

mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.sh

4.2.5查看Tomcat是否启动

出现下面的页面就是安装成功了

4.2部署2Tomcat 应用服务器 192.168.14.102

这里的和部署1Tomcat查不到,但是这个服务器要安装两天Tomcat

 第一步、先安装包文件

第二步、将该文件解包 

注意:这里要安装两个Tomcat

 第三步、配置全局变量

source /etc/profile

 第四步、将两个Tomcat路径换一下

mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat/tomcat1
mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat/tomcat2

第五步、开启Tomcat服务

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

 8080的端口

 

 8081的端口

 

第六步、 Tomcat1 server 192.168.14.102配置

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>   #指定为 test1 页面
</head><body>
<% out.println("动态页面 1,http://www.test1.com");%>
</body>
</html>vim /usr/local/tomcat/conf/server.xml
#由于主机名 name 配置都为 localhost,需要删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true"></Context>
</Host>/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.sh 

 修改配置文件更改端口   /usr/local/tomcat/tomcat2/conf/server.xml

第六步 Tomcat2 server 配置 192.168.14.103

vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html><head>
<title>JSP test2 page</title>   #指定为 test2 页面
</head><body>
<% out.println("动态页面 2,http://www.test2.com");%>
</body>
</html>vim /usr/local/tomcat/tomcat1/conf/server.xml
#删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true" />
</Host>/usr/local/tomcat/tomcat1/bin/shutdown.sh 
/usr/local/tomcat/tomcat1/bin/startup.sh tocmat shell 脚本  case vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html><head>
<title>JSP test3 page</title>   #指定为 test3 页面
</head><body>
<% out.println("动态页面 3,http://www.test3.com");%>
</body>
</html>vim /usr/local/tomcat/tomcat2/conf/server.xml
#删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/tomcat2/webapps/test" path="" reloadable="true" />
</Host>/usr/local/tomcat/tomcat2/bin/shutdown.sh 
/usr/local/tomcat/tomcat2/bin/startup.sh 

 8080端口

 80801端口

 

 第七步、Nginx server 配置 ,准备静态页面和静态图片

echo '<html><body><h1>这是静态页面</h1></body></html>' > /usr/local/nginx/html/index.html
mkdir /usr/local/nginx/html/img
cp /root/game.jpg /usr/local/nginx/html/img

第八步、配置nginx.conf

vim /usr/local/nginx/conf/nginx.conf
......
http {
......#gzip on;#配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大
upstream tomcat_server {server 192.168.80.100:8080 weight=1;server 192.168.80.101:8080 weight=1;server 192.168.80.101:8081 weight=1;
}server {listen 80;server_name www.kgc.com;charset utf-8;#access_log logs/host.access.log main;#配置Nginx处理动态页面请求,将 .jsp文件请求转发到Tomcat 服务器处理location ~ .*\.jsp$ {proxy_pass http://tomcat_server;
#设置后端的Web服务器可以获取远程客户端的真实IP
##设定后端的Web服务器接收到的请求访问的主机名(域名或IP、端口),默认HOST的值为proxy_pass指令设置的主机名。如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来在反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。proxy_set_header HOST $host;   
##把$remote_addr赋值给X-Real-IP,来获取源IPproxy_set_header X-Real-IP $remote_addr;
##在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来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;}......}
......
}

最后,测试一下

测试静态页面效果

浏览器访http://192.168.14.100/

浏览器访问http://192.168.14.100/two.jpg

测试负载均衡效果,不断刷新浏览器测试

浏览器访问 http://192.168.14.100/index.jsp

访问结果

 

 

 总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/8579.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云国际站:云原生数据库2.0时代,阿里云如何将云原生进行到底?

【猎云网上海】11月3日报道&#xff08;文/孙媛&#xff09; “PolarDB将云原生进行到底&#xff01;” 在2021年云栖大会上&#xff0c;阿里巴巴集团副总裁、阿里云智能数据库事业部总负责人李飞飞宣布了PolarDB实现三层解耦的重磅升级以及引领云原生数据库技术持续创新的态…

【python】数据处理

1.按照间隔生成时间戳,并保存为csv文件 ##### 按照间隔生成时间戳,并保存为csv文件 import pandas as pd from datetime import datetime, time, timedelta times [] ts datetime(2023, 6, 17, 9, 10, 0) while ts < datetime(2023, 6, 17, 9, 26, 40):# times.append(t…

博客相关推荐在线排序学习实践

现有固定槽位的填充召回策略在相关线上推荐服务中缺乏有效的相关性排序&#xff0c;存在较硬的排列顺序&#xff0c;各个策略之间互相影响&#xff0c;导致线上基于规则的拓扑图比较复杂&#xff0c;因此设计在线推理服务&#xff0c;通过学习用户行为完成在线排序。 1. 博客相…

数通王国历险记之TCP协议下的三大协议的验证实验

系列文章目录 数通王国历险记&#xff08;1&#xff09; 前言 一&#xff0c;我们要先知道PDU是什么&#xff1f; 二、TCP协议下的三大协议的验证实验 1.FTP的验证实验 1&#xff0c;拓扑图 2.将lsw4配置一下 3&#xff0c;FTP服务器端开启FTP服务&#xff1a; 4&#x…

本地新项目推送至gitlab仓库

1. gitlab上新建一个空白项目 gitlab上点击new project按钮&#xff0c;新建一个项目 新建空白项目 项目名称与本地新建项目名称相同&#xff0c;其余根据具体需要选择 2. 初始化本地仓库并commit项目 进入本地项目根目录下&#xff0c;右击 git bash here打开命令窗口 初始化…

机器学习21:机器学习工程落地注意事项-I

目录 1.静态训练与动态训练 1.1 如何选择训练方式&#xff1f; 2.静态与动态推理 2.1 离线推理的优缺点 2.2 在线推理的优缺点 3.数据依赖性 3.1 可靠性 3.2 版本控制 3.3 必要性 3.4 相关性 3.5 反馈回路 4.参考文献 到目前为止&#xff0c;【机器学习1&#xff5e…

小型中文版聊天机器人

入门小菜鸟&#xff0c;希望像做笔记记录自己学的东西&#xff0c;也希望能帮助到同样入门的人&#xff0c;更希望大佬们帮忙纠错啦~侵权立删。 目录 一、简单介绍与参考鸣谢 二、数据集介绍 三、数据预处理 1、重复标点符号表达 2、英文标点符号变为中文标点符号 3、繁…

中北大学 - 信息对抗大三下学习课程设计(爬取招标网站,进行招标分析,数据保存execl中)

文章目录 1. 题目描述2. 项目细节分析定时爬取任务思路避免多次爬取数据重复问题网站结构根据爬取信息确认招标地区 3. 项目代码4. 运行截图 1. 题目描述 中北大学信息安全技术爬虫课程设计 题目 5&#xff1a;招投标信息分析系统 &#xff08;20050441 2005031113&#xff09…

在 7 月 4 日,PoseiSwap 治理通证 $POSE 上线了 BNB Chain 上的头部

在 7 月 4 日&#xff0c;PoseiSwap 治理通证 $POSE 上线了 BNB Chain 上的头部 DEX PancakeSwap&#xff08;POSE/ZBC 交易对&#xff09;&#xff0c;在 $POSE 开盘交易的 10 分钟内&#xff0c;其最高涨幅达到了 2169.22%&#xff0c;所有的早期投资者基本都从中获得了不菲的…

Kafka入门, 消费者工作流程(十八)

kafka消费方式 pull(拉)模式&#xff1a; consumer采用从broker中主动拉取数据。 Kafka采用这种方式。 push(推)模式&#xff1a; Kafka没有采用这种方式&#xff0c;因为由broker决定消息发送速率&#xff0c;很难适应所有消费者的速率。例如推送速度是50m/s&#xff0c;consu…

Ant Design4中Form.List和shouldUpdate一起使用的坑

背景 在antd3.x版本中&#xff0c;如果要实现一组表单增加删除的功能&#xff0c;需要Array.map()加上state状态来控制&#xff0c;代码比较复杂&#xff0c;而且非常不优雅。 其次在antd3.x中&#xff0c;表单中任何一个表单项的内容更新都会触发页面重新渲染&#xff0c;这在…

SpringBoot整合minio服务(超详细)

一、使用docker部署minio 1、拉取镜像 docker pull minio/minio 2、创建目录 mkdir -p /home/minio/config mkdir -p /home/minio/data 3、创建Minio容器并运行 docker run -p 9000:9000 -p 9090:9090 \--nethost \--name minio \-d --restartalways \-e "MINIO_ACC…