nginx+Tomcat(反向代理、动静分离、负载均衡)

目录

前言

一、nginx和tomcat组合的架构

二、案例操作


前言

tomcat服务既可以处理动态页面,也可以处理静态页面;但其处理静态页面的速度远远不如nginx和apache服务,但ngingx和apache服务无法直接处理动态页面,下文就讲述了nginx和tomcat组合使用,实现动静分离和负载均衡;目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,提升整个站点的负载并发能力

一、nginx和tomcat组合的架构

  • standalone模式:Tomcat单独运行,直接接受用户的请求,不推荐。
  • 单机反向代理模式:单机运行,提供了一个Nginx作为反向代理,可以做到静态由nginx提供响应,动态jsp代理给Tomcat

LNMT:Linux + Nginx + MySQL + Tomcat

LAMT:Linux + Apache(Httpd)+ MySQL + Tomcat

  • 反向代理多级:前置一台Nginx,给多台Tomcat实例做反向代理和负载均衡调度,Tomcat上部署的纯动态页面更适合

LNMT:Linux + Nginx + MySQL + Tomcat

  • 反向代理多机多级

LNNMT:Linux + Nginx + Nginx + MySQL + Tomcat

动态服务器的问题,往往就是并发能力太弱,往往需要多台动态服务器一起提供服务。如何把并发的压力分摊,这就需要调度,采用一定的调度策略,将请求分发给不同的服务器,这就是Load Balance负载均衡。当单机Tomcat,演化出多机多级部署的时候,一个问题便凸显出来,这就是Session。而这个问题的由来,都是由于HTTP协议在设计之初没有想到未来的发展

二、案例操作

前提:关闭所有设备的防火墙和核心防护

[root@localhost ~]#systemctl stop firewalld
[root@localhost ~]#setenforce 0

安装设备对应的服务软件,如nginx反向代理服务器、nginx服务器1和2都需安装nginx软件,Tomcat服务器1和2需安装tomcat软件

#nginx反向代理服务器、nginx服务器1和2
[root@localhost ~]#yum install epel-release.noarch -y
[root@localhost ~]#yum install -y nginx
[root@localhost ~]#systemctl start nginx
#Tomcat服务器1和2需安装tomcat软件
参考https://blog.csdn.net/m0_71815887/article/details/136382688?spm=1001.2014.3001.5502

注:

  • 当客户端访问的是静态资源,nginx反向代理服务器会根据负载均衡的轮询调度算法,分别调度到nginx服务器1或nginx服务器2处理静态资源(比例1:1)。如果客户端访问的是动态资源,nginx服务器1和nginx服务器2也会根据负载均衡的轮询调度算法,分别调度到tomcat服务器1或tomcat服务器2处理动态资源(比例1:1)
  • 在现实环境中,nginx反向代理服务器反向代理的nginx服务器1和nginx服务器2的网页内容是一样的,但这里,为了方便展示效果,就使用不同的网页,方便区分。tomcat服务器1和tomcat服务器2同理

客户端访问:http://172.16.12.10/index.html     ---------> nginx服务器1     或   nginx服务器2

                      http://172.16.12.10/index.jsp       ---------> tomcat服务器1   或  tomcat服务器2

nginx反向代理服务器配置:

[root@localhost ~]#vim /etc/nginx/nginx.conf
upstream web {server 172.16.12.11;server 172.16.12.12;}server {listen       80;listen       [::]:80;server_name  _;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;root         /usr/share/nginx/html;location / {proxy_pass http://web/;}
[root@localhost ~]#nginx -t
[root@localhost ~]#nginx -s reload

nginx服务器1配置:

[root@localhost ~]#vim /etc/nginx/nginx.conf
upstream web {server 172.16.12.11;server 172.16.12.12;}server {listen       80;listen       [::]:80;server_name  _;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;root         /usr/share/nginx/html;location / {proxy_pass http://web/;}
[root@localhost ~]#nginx -t
[root@localhost ~]#nginx -s reload
[root@localhost ~]#scp /etc/nginx/nginx.conf 172.16.12.12:/opt   #将配置文件拷贝到nginx服务器2的opt目录下
[root@localhost ~]#echo "welcome to static_server nginx 1 " > /usr/share/nginx/html/index.html

nginx服务器2配置: 

[root@localhost ~]#cd /opt
[root@localhost opt]#cp nginx.conf /etc/nginx/nginx.conf
[root@localhost opt]#nginx -t
[root@localhost opt]#nginx -s reload
[root@localhost opt]#echo "welcome to static_server nginx 2 " > /usr/share/nginx/html/index.html

 tomcat服务器1配置:

[root@localhost ~]#mkdir /usr/local/tomcat/webapps/dynamic
[root@localhost ~]#echo "welcome to dynamic_server tomcat 1 " > /usr/local/tomcat/webapps/dynamic/index.jsp
[root@localhost ~]#vim /usr/local/tomcat/conf/server.xml
<Context docBase="/usr/local/tomcat/webapps/dynamic"path="" reloadable="true"  />
[root@localhost ~]#systemctl restart tomcat

 

tomcat服务器2配置:

[root@localhost ~]#mkdir /usr/local/tomcat/webapps/dynamic
[root@localhost ~]#echo "welcome to dynamic_server tomcat 2 " > /usr/local/tomcat/webapps/dynamic/index.jsp
[root@localhost ~]#vim /usr/local/tomcat/conf/server.xml
<Context docBase="/usr/local/tomcat/webapps/dynamic"path="" reloadable="true"  />
[root@localhost ~]#systemctl restart tomcat

客户端测试:

#访问静态资源
[root@localhost ~]#curl 172.16.12.10/index.html

#访问动态资源
[root@localhost ~]#curl 172.16.12.10/index.jsp

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

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

相关文章

windows安装pytorch(anaconda安装)

文章目录 前言一、安装anaconda1、进入官网下载&#xff08;1&#xff09;点击view all Installers&#xff08;2&#xff09;下载需要的版本 2、一顿默认安装就行&#xff08;到这一步这样填&#xff09;3、进入开始找到Anaconda Prompt&#xff0c;点击进入到base环境 二、新…

Python绘图-9饼图(下)

9.6饼图添加阴影 9.6.1图像呈现 9.6.2绘图代码 # 导入相关库 import numpy as np # 导入numpy库&#xff0c;用于处理数组和数值计算 import matplotlib.pyplot as plt # 导入matplotlib的绘图模块&#xff0c;用于可视化 import matplotlib.patheffects as path_effects …

实际中的Stream流的用法

实际中的Stream流的用法 不同对象怎么生成stream流对象 package stream;/*** @author 刘诗良* @version 1.0* @Description*/ import java.util.*; import java.util.stream.Stream;public class StreamDemo {public static void main(String[] args) {//Collection体系的集合…

springBoot-SpringBoot自定义starter

在一个空Maven项目中&#xff0c;新增xxxx-spring-boot-starter和xxxx-spring-boot-autoconfigure两个模块&#xff0c;xxxx是你这个starter是做什么的&#xff0c;模块xxxx-spring-boot-starter主要是作依赖管理&#xff0c;外界使用我们自定义的starter只需要导入我们xxxx-sp…

记 Hyperf booted模型事件的使用

前因 产品经理提了一个需求&#xff0c;要求能自定义内容的创建时间&#xff0c;当前事件大于创建时间时&#xff0c;才能查询到这些内容&#xff0c;并对内容进行操作 我的第一反应&#xff1a;不算麻烦&#xff0c;只需要在仓储层的查询方法中&#xff0c;给每个查询都多加…

Golang Copy()方法学习

前言 主要是涉及到深浅拷贝相关的&#xff0c;但是在看的一个资料过程中发现他有错…并且一系列&#xff0c;复制粘贴他的&#xff0c;也都错了。 错误文章指路 很显然&#xff0c;Copy是深拷贝啊&#xff01;&#xff01;&#xff01; Copy功能 copy的代码很少&#xff0c…

9.WEB渗透测试-Linux基础知识-Linux用户权限管理(上)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;8.WEB渗透测试-Linux基础知识-Linux基础操作&#xff08;二&#xff09;-CSDN博客 用户管…

如何在jupyter notebook 中下载第三方库

在anconda 中找到&#xff1a; Anaconda Prompt 进入页面后的样式&#xff1a; 在黑色框中输入&#xff1a; 下载第三方库的命令 第三方库&#xff1a; 三种输入方式 标准保证正确 pip instsall 包名 -i 镜像源地址 pip install pip 是 Python 包管理工具&#xff0c;…

【笔记】【电子科大 离散数学】 3.谓词逻辑

谓词引入 因为含变量的语句&#xff08;例如x > 3&#xff09;不是命题&#xff0c;无法进行逻辑推理。 为了研究简单命题句子内部的逻辑关系&#xff0c;我们需要对简单命题进行分解&#xff0c;利用个体词&#xff0c;谓词和量词来描述它们&#xff0c;并研究个体与总体…

非阻塞实现高效键盘扫描功能(STM32F4XX)

目录 概述 1 原理分析 1.1 技术背景 1.2 系统硬件 1.3 STM32 IO&#xff08;输入模式&#xff09;寄存器分析 1.3.1 输入IO的功能描述 1.3.2 输入配置 1.3.3 GPIO 寄存器&#xff08;输入模式相关&#xff09; 1.3.3.1 GPIO 端口模式寄存器 1.3.3.2 GPIO 端口上拉/下拉…

通过联合部署DDoS高防和WAF提升网站防护能力

如果您的网站遭受的攻击既有流量型攻击&#xff0c;又混杂精巧的Web应用层攻击时&#xff08;例如SQL注入、跨站脚本攻击、命令注入等&#xff09;时&#xff0c;推荐您组合使用阿里云DDoS高防和Web 应用防火墙 WAF&#xff08;Web Application Firewall&#xff09;&#xff0…

NumpyPython 笔记2 3.5

如果不是矩阵的话&#xff0c;也可以用索引 矩阵也可以 np.vstack 上下合并两个数组 np.hstack 左右合并两个数组 没看懂 np.array 可以合并三个 np.concatenate 可以在后面axis定制是在行还是列上进行合并 np.split(A,2,axis1):对哪个东西&#xff0c;分成多少块&#…