Tomcat负载均衡部署动静分离

news2024/11/24 0:14:11

Nginx+Tomcat架构拓扑

环境部署

Nginx服务器:IP地址192.168.32.3

Tomcat服务器1:IP地址192.168.32.4

Tomcat服务器2:IP地址192.168.32.5

关闭防火墙,关闭开机自启

systemctl stop firewalld.service
setenforce 0

Nginx 主机安装

 1、安装 nginx 软件包

关闭防火墙,将 nginx 所需软件包解压在 /opt 目录下

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/

2、安装所需依赖包


yum -y install pcre-devel zlib-devel gcc gcc-c++ make

3、创建 nginx 运行用户、组

useradd -M -s /sbin/nologin nginx

4、编译安装 Nginx

cd /opt/nginx-1.12.0/

./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

#-----配置命令解释
--prefix=/usr/local/nginx      #指定nginx的安装路径
--user=nginx                   #指定用户名
--group=nginx                  #指定组名
--with-http_stub_status_module #启用 http_stub_status_module 模块以支持状态统计
#-----

make && make install

#让系统识别nginx的操作命令, 加入到环境变量中
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

5、添加 Nginx 系统服务

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
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target


chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

6、检查、启动、重启、停止 nginx服务

#检查配置文件是否配置正确
nginx -t

#启动 nginx
nginx
#查看端口是否启动
netstat -natp | grep 80

结果:

Tomcat 安装及配置

安装 Tomcat

在部署 Tomcat 之前必须安装好 jdk,因为 jdk 是 Tomcat 运行的必要环境。

java -verion #查看jdk版本

1.关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下

jdk-8u201-linux-x64.rpm
apache-tomcat-9.0.16.tar.gz

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

2.安装JDK

cd /opt
rpm -qpl jdk-8u201-linux-x64.rpm 
rpm -ivh jdk-8u201-linux-x64.rpm 
java -version

3.设置JDK环境变量

vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

source /etc/profile.d/java.sh
java -version

4.安装启动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        #启动Tomcat

netstat -natp | grep 8080    #查看是否启动成功

Tomcat 服务器1配置

mkdir -p /usr/local/tomcat/webapps/cc	#创建一个测试的目录
vim /usr/local/tomcat/webapps/cc/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>     #动态页面的配置
<html> 
<head>
<title>JSP test1 page </title>
</head>
<body>
<% out.println("动态页面 1,http://www.test1.com");%>
</body>
</html>


#编辑tomcat主配置文件,添加虚拟主机配置,这里要先删掉原先的主机名等配置
vim /usr/local/tomcat/conf/server.xml			   
-------------------------------------------------------------------------------------------------
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" 
#找到这个先删掉,否则最后会出错
----------------------------------------------------------------------------------------
#在行尾162行处插入下面配置,需注意结尾的</Host>
 <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidati    on="false" xmlNamespaceAware="false">
149      <Context docBase="/usr/local/tomcat/webapps/cc" path="" reloadable="true" />

</Host>
----------------------------------------------------------------------------------------


shutdown.sh
startup.sh			 								#重启服务

Tomcat 服务器2配置

mkdir -p /usr/local/tomcat/webapps/cc				#创建一个测试的目录
mkdir -p /usr/local/tomcat/webapps/cc			#动态页面的配置
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page </title>
</head>
<body>
<% out.println("动态页面 2,http://www.test2.com");%>
</body>
</html>


#编辑tomcat主配置文件,添加虚拟主机配置,这里要先删掉原先的主机名等配置
vim /usr/local/tomcat/conf/server.xml		   
----------------------------------------------------------------------------------------
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" 
#找到这个先删掉,否则最后会出错
----------------------------------------------------------------------------------------
#在行尾162行处插入下面配置,需注意结尾的</Host>
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
     <Context docBase="/usr/local/tomcat/webapps/cc" path="" reloadable="true" />
</Host>
----------------------------------------------------------------------------------------
shutdown.sh
startup.sh				 								#重启服务

Nginx server 配置

静态页面配置

echo '<html><body><h1>this is static</h1></body></html>' > /usr/local/nginx/html/index.html
mkdir -p /usr/local/nginx/html/image
cd /usr/local/nginx/html/image

#主配置文件57行下添加下面配置参数,让页面能够加载图片
vim /usr/local/nginx/conf/nginx.conf

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
root /usr/local/nginx/html/picture;
expires 10d;
 }

nginx -t
systemctl restart nginx.service 

配置nginx主配置文件

vim /usr/local/nginx/conf/nginx.conf
......
#配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大

#gzip  on;													#33行下面加入以下内容
 upstream tomcat_server {
    server 192.168.16.14:8080 weight=1;
    server 192.168.16.15:8080 weight=1;
}  


#45行下加入下面配置参数			
#access_log  logs/host.access.log  main;

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;
}            

添加参数解析

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

location ~ .*\.jsp$ {			
#把nginx接收到的客户端的ip地址赋值给跳转到tomcat请求中的源ip,识别客户的真实ip,并且赋值与跳转
proxy_pass http://tomcat_server; 

proxy_set_header HOST $host;	
#设定后端的web服务器接收到的请求访问的主机名(域名或ip、端口),默认host的值为proxy_pass直连设置的主机名

proxy_set_header X-Real-IP $remote_addr;		
#把$remote_addr复制给X-Real-IP(自定义),来回去源IP

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;		
#在nginx最为代理服务器时,设置的IP列表,会把经过的及其ip,代理及其ip都记录下来

检查主配置文件语法并重启服务

nginx -t

systemctl restart nginx.service

验证结果

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机组成原理习题课第三章-1(唐朔飞)

计算机组成原理习题课第三章-1&#xff08;唐朔飞&#xff09; ✨欢迎关注&#x1f5b1;点赞&#x1f380;收藏⭐留言✒ &#x1f52e;本文由京与旧铺原创&#xff0c;csdn首发&#xff01; &#x1f618;系列专栏&#xff1a;java学习 &#x1f4bb;首发时间&#xff1a;&…

高电压放大器与高电流放大器该如何选择使用

虽然电压放大器和电流放大器都属于功率放大器的分支类型&#xff0c;所能起到的效果和作用也都是一致的&#xff0c;不过两者还是细微差别的。经常会有人在后台咨询“电压放大器和电流放大器有什么区别&#xff0c;该如何选择使用”等等&#xff0c;针对这些疑问&#xff0c;今…

zynq实现视频动态字符叠加OSD,提供2套工程源码和技术支持

目录1.网上同行的OSD方案(太low)2.本方案OSD的优势3.HLS实现方案4.OSD延时和资源占用情况5.工程1&#xff1a;zynq7100实现字符叠加6.上板调试验证7.福利&#xff1a;工程源码获取1.网上同行的OSD方案(太low) 视频的字符叠加&#xff0c;简称OSD&#xff0c;是FPGA图像处理的基…

PG::Vegeta1

nmap -Pn -p- -T4 --min-rate1000 192.168.201.73 nmap -Pn -p 22,80 -sCV 192.168.201.73 查看80端口的服务。 没有发现可用的信息&#xff0c;尝试爆破路径。 gobuster dir -e -w /usr/share/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-big.txt -u htt…

年薪50W的数字前端设计工程师是做什么的?

近两年&#xff0c;芯片行业大火&#xff0c;行业的发展受到了很大的政策支持&#xff0c;芯片行业不仅发展前景好&#xff0c;薪资待遇也很高&#xff0c;所以不少人纷纷转行IC&#xff0c;那么转行IC岗位该如何选择呢&#xff1f;下面IC修真院就重点为大家来介绍一下数字前端…

【Android App】检查手机连接WiFi信息以及扫描周围WiFi的讲解及实战(附源码和演示 超详细必看)

需要全部代码请点赞关注收藏后评论区留言私信~~~ 一、检查是否连接WiFi以及输出WiFi信息 传统的定位方式不适用于室内的垂直定位&#xff0c;原因如下&#xff1a; &#xff08;1&#xff09;卫星定位要求没有障碍物遮挡&#xff0c;它在户外比较精准&#xff0c;在室内信号就…

【Canvas】js用canvas绘制一个钟表时钟动画效果

学习JavaScript的看过来&#xff0c;有没有兴趣用Canvas画图呢&#xff0c;可以画很多有趣的事物&#xff0c;自由发挥想象&#xff0c;收获多多哦&#xff0c;旋转角度绘图这个重点掌握到了吗&#xff0c;这里有一个例子&#xff0c;如何用canvas画钟表时钟动图效果&#xff0…

Mybatis:快速搭建Mybatis(2)

快速搭建Mybatis搭建Mybatis目录框架步骤一&#xff1a;创建Maven工程步骤二&#xff1a;创建mybatis的核心配置文件步骤三&#xff1a;创建mapper接口步骤四&#xff1a;创建Mybatis的映射文件步骤四&#xff1a;通过junit测试增删改查功能步骤五&#xff1a;加入logback日志功…

【JavaSE】String类型

目录 1. Java中为何要有 String 类&#xff1f; 2. String 类中的常用方法 2.1 String 类中的构造方法 2.2 String 类对象的比较 2.2.1 比较是否引用同一个对象 2.2.2 使用 equals 方法 2.2.3 compareTo 方法 2.3 字符串的查找 2.4 字符串与别的数据类型的转换 2.4.1 数值和字…

RationalDMIS 2022位置度评价,轮廓度评价时, 元素理论值变了,如何一劳永逸解决!

1,几何尺寸和公差符号 2.通用尺寸公差符号 3.位置度(Position) 位置度的被测要素有点、直线和平面,基准要素主要有直线和平面。给定位置度的被测要素相对于基准要素必须保持图样给定的正确位置关系,被测要素相对于基准要素的正确位置关系应由基准要素和理论正确尺寸来…

python mitmproxy +雷电模拟器 安装

第一步 安装mitmproxy 首先在安装好python 的情况下 pip install mitmproxy 第二步 电脑端安装证书 进入这个目录下 如果没有就重新mitmproxy 点击mitmproxy-ca.p12&#xff0c;在电脑端安装证书 点击下一页 点击下一页 不用管密码直接下一页 按照途中选择&…

基于Spring更简单的读取和存储对象

在spring的创建和使用这篇博客中有讲到关于Spring存储和读取Bean对象的操作,但是细心的朋友有没有发现那些操作没有想象中的简单呢?所以呀,我今天要给朋友分享的是更简单的存储和读取Bean对象的方法,快来看看吧~ 在Spring中想要更简单的存储和读取对象的核心就是使用注解,这就…

蓝牙学习四(广播)

1.简介 什么叫做广播&#xff0c;顾名思义就像广场上的大喇叭一样&#xff0c;不停的向外传输着信号。不同的是&#xff0c;大喇叭传输的是音频信号&#xff0c;而蓝牙传输的是射频信号。 BLE使用的是无线电波传递信息&#xff0c;就是将数据编码&#xff0c;调制到射频信号中发…

cmake使用

1. cmake概述及例子 CMake快速入门 cmake、qmake、cl之间关系 1.1 各种cmake cmake根据CMakeLists.txt生成makefile&#xff0c;make根据makefile行编译。 1.1.1 最简cmake&#xff1a;生成可执行程序&#xff08;一个文件&#xff09; #CMakeLists.txt cmake_minimum_req…

【正点原子FPGA连载】 第二十章 LCD触摸屏实验摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第二十章 LCD触摸…

第十一章 建立语义化版本并提交组件库到NPM仓库

语义化版本是这样规定的。 版本格式&#xff1a;主版本号.次版本号.修订号&#xff08;MAJOR.MINOR.PATCH&#xff09;&#xff0c;版本号递增规则如下&#xff1a; 主版本号&#xff1a;当你做了不兼容的 API 修改&#xff1b;次版本号&#xff1a;当你做了向下兼容的功能性…

springboot+vue毕业生离校系统

目 录 摘 要 I 目 录 III 第1章 概述 1 1.1 研究背景 1 1.2 研究现状 1 1.3 研究内容 2 第二章 开发技术介绍 2 2.1 系统开发平台 2 2.2 平台开发相关技术 3 2.2.1 B/S架构 3 2.2.2 Java技术介绍 4 2.2.3 mysql数据库介绍 4 2.2.4 …

盘点程序员的花式赚外快的骚操作

2022世界杯比赛难得如期开幕了&#xff0c;卡塔尔王子的表情包想必大家已经看到眼晕。 我拿2200亿和你玩&#xff0c;你踢一个0&#xff1a;2过不过分啊~ 现实中的投资可不比卡塔尔王子的表情包失落更多&#xff0c;毕竟投资有风险入行需谨慎。 然而悲惨的事实是&#xff0c;…

[附源码]SSM计算机毕业设计新生入学计算机配号系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

企业若要实现预期广告推广效果,必须做好这六个步骤

在网络营销中&#xff0c;软文营销是一种最常用的营销手段。 我们知道&#xff0c;很多公司都是用软文进行广告推广。 然而&#xff0c;许多公司都觉得&#xff0c;软文营销并不是一件容易的事情&#xff0c;因为它不仅要有高品质的内容&#xff0c;还要有一定的操作能力&#…