8月11日上课内容 nginx的多实例和动静分离

多实例部署 

在一台服务器上有多个tomcat的服务。

配置多实例之前,看单个实例是否访问正常。

1.安装好 jdk


2.安装 tomcat

cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mkdir /usr/local/tomcat
mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2

3.配置 tomcat 环境变量


vim /etc/profile.d/tomcat.sh
#tomcat1
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
export CATALINA_BASE1=/usr/local/tomcat/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1

#tomcat2
export CATALINA_HOME2=/usr/local/tomcat/tomcat2
export CATALINA_BASE2=/usr/local/tomcat/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat/tomcat2

export CATALINA_HOME1=/usr/local/tomcat/tomcat1

tomcat主目录的路径,包含所有tomcat的文件

export CATALINA BASE1=/usr/local/tomcat/tomcat1
指定tomcat实例目录
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1

tomcat主目录的路径,包含所有tomcat的文件

这三条在环境变量中声明,配置成全局变量,方便后面传参/赋值


source /etc/profile.d/tomcat.sh

进入控制tomcat运行的文件,把服务shutdown一下

基于Tomcat主目录,强行复制一个相同的

vim /etc/profile.d/tomcat.sh


4.修改 tomcat2 中的 server.xml 文件,要求各 tomcat 实例配置不能有重复的端口号


vim /usr/local/tomcat/tomcat2/conf/server.xml
<Server port="8006" shutdown="SHUTDOWN">        #22行,修改Server prot,默认为8005 -> 修改为8006
<Connector port="8081" protocol="HTTP/1.1"        #69行,修改Connector port,HTTP/1.1  默认为8080 -> 修改为8081
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />    
#116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8010

第一个连接器默认监听8080端口负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。
第二个连接器默认监听8009端口,负责和其他的HTTP服务器建立连接
在把Tomcat与其他HTTP服务器集成时,需要用到这个连接器。

第三个连接器
port="8010":指定AJP连接器监听的端口号。在这个示例中,AJP连接器监听在8010端口上。

protocol="AJP/1.3":指定连接器所使用的协议。这里设置为AJP/1.3,表示使用AJP协议的版本1.3。

redirectPort="8443":指定重定向端口。当AJP连接器接收到HTTP请求时,如果请求是通过HTTPS(加密)访问的,
则会将请求重定向到8443端口。

AJP连接器用于将静态资源和动态请求从前端Web服务器(如Apache HTTP Server)转发到Tomcat服务器。
这样可以将Tomcat服务器隐藏在防火墙之后,提高安全性,同时提供更高的性能,特别是在处理动态请求时。
常见的AJP连接器配置是为了将Tomcat与Apache HTTP Server或Nginx等前端服务器集成,以实现负载均衡、反向代理等功能

引入一个很好用的功能,是第三方的,需要安装

telnet 测试服务器ip地址是否能正常通信和测试端口通信是否正常(工作当中用得到,面试会问)

通过什么方式检测出来80端口不通?telnet一测就知道

例:telnet 192.168.233.61 80

 

为什么能ping通却不能访问?因为服务器是基于端口通信的,所以也要检查端口

端口可能不存在 端口没有打开

telnet 192.168.233.61 80试试

出现Escape character is 就表示通信正常,已经建立了通信

去tomcat2,改tomcat2的端口,因为tomcat1已经占用8009,8080等端口。复制过来的tomcat2端口一样,所以得改

改之前先把配置文件复制一下。注:改主文件,备份文件只是预防你改错了好还原回去

把shutdown端口改为8006

 http通信端口8080也改为8081

和web服务器通信的端口8009改为8010

注:端口可以改为任意的数字,只要端口不被占用都可以,但是端口有范围65535以内

5.修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量

vim /usr/local/tomcat/tomcat1/bin/startup.sh 
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
##添加以下内容
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1


vim /usr/local/tomcat/tomcat1/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1


vim /usr/local/tomcat/tomcat2/bin/startup.sh 
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2


vim /usr/local/tomcat/tomcat2/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2
步骤详解:

修改启动文件

先改tomcat1的

vim startup.sh

在尾行添加上一步设置的全局变量

export CATALINA_BASE=$CATALINA_BASE1

export CATALINA_HOME=$CATALINA_HOME1

export TOMCAT_HOME=_TOMCAT_HOME1

vim shutdown.sh

配置这两个的目的就是为了做系统服务控制,让他能够识别到我启动是谁,关的是谁

配置完tomcat1的接着配置一下tomcat2的

同样的在最后一行,把tomcat2的添加一下

vim startup.sh 同样配置一下startup

这样1和2的多实例就都配置好了

启动一下服务

6.浏览器访问测试


http://192.168.233.71:8080
http://192.168.233.71:8081

看一下页面是否能正常访问。都是基于71这台服务器,分别看一下8080和8081端口

nginx+tomcat实现动静分离

静:静态页面
动: 动态页面
分别可以对静态页面和动态页面发起不同的请求,会有不同的响应结果。


nginx反向代理------负载均衡------tomcat是后端服务器------web静态nginx------静态请求----->nginx

------动态页面------tomcat

tomcat并发量能力弱,只有nginx的六分之一,所以要有负载均衡进行合理的调用分配。

示例图:

开始正式操作

准备好了4台服务器

test1 192.168.233.10 作为客户端

nginx1 61 作为web服务器

tomcat 71 多实例

tomcat 72 单独后端web服务器,用来处理动态请求

先配置nginx1
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
    #gzip on;
    
    #配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大
    upstream tomcat_server {
        server 192.168.233.71:8080 weight=1;
        server 192.168.233.71:8081 weight=1;
    }
    
    server {
        listen 80;
        server_name localhost;
    
        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,来获取源IP
            proxy_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;
            expires 10d;
        }
        
        location / {
            root html;
            index index.html index.htm;
        }
......
    }
......
}

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 nginx.conf

在http模块当中配置

写上后端要调用的服务器,配置权重,多实例权重分配小一点,单实例权重稍高一点,让其访问量偏大一点

server里面配置处理动态请求的location

检查语法,没有问题,nginx配置完成

配置tomcat1 实例1

动态页面

建立一个动态页面访问内容,访问后端服务器,就会访问到这个页面

配置多实例中的tomcat2

 

再回到tomcat1

把默认配置的host删除掉

再去tomcat2,一样把server.vml配置一下

多实例tomcat配置完成,去验证一下单实例服务是否正常

正常,开始配置

单实例,只需部署一下访问页面即可

vim index.jsp配置

vim server.xml 一样把原来的host删除,再添加一个Host

注意路径指向要一直,否则获取不到index文件

从tomcat1开始,重启服务

tomcat2

看看是否能够访问到服务

因为路径错误,所以访问不到

/usr/local/tomcat/tomcat2不存在,改为/usr/local/tomcat2

改tomcat1的server文件 

 重启

 这样就可以了

把静态页面请求也配置一下

 

把图片拖进来

请求一下静态页面

请求一下动态页面:

这样就完成了动静分离

综合:

四层转发流量+七层后端代理+动静分离

架构如图:

四层转发流量+七层后端代理
环境:
192.168.233.61 nginx四层代理
192.168.233.62 nginx七层代理
192.168.233.63 nginx七层代理
192.168.233.71 tomcat1多实例
192.168.233.72 tomcat2单实例

systemctl stop firewalld
setenforce 0

192.1682.233.61 nginx四层代理:
vim /usr/local/nginx/conf/nginx.conf

pid /usr/local/nginx/run/nginx.pid;


events {
    worker_connections  1024;
}

stream {
   upstream test {
       server 192.168.233.62:80;
       server 192.168.233.63:80;


  }
  server {

       listen 8080;
       proxy_pass test;
 }

}

nginx七层代理62和63:
    upstream ky30 {
       server 192.168.233.71:8080 weight=1;
       server 192.168.233.71:8081 weight=1;
       server 192.168.233.72:8080 weight=1;
    }
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
        location ~ .*\.jsp$ {
           proxy_pass http://ky30; #配置Nginx处理动态页面请求,将 .jsp文件请求转发到Tomcat 服务器处理
           
           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都记录下来
           
        }
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
            root /usr/local/nginx/html;
            expires 10d;
        }
配置相同

192.168.233.71 tomcat1多实例:

cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2

#配置多实例tomcat
vim /etc/profile.d/tomcat.sh
#tomcat1的全局变量设置
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
export CATALINA_BASE1=/usr/local/tomcat/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1
 
#tomcat2的全局变量设置
export CATALINA_HOME2=/usr/local/tomcat/tomcat2
export CATALINA_BASE2=/usr/local/tomcat/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat/tomcat2
 
#加载设置好的全局变量
source /etc/profile.d/tomcat.sh

修改 tomcat2 中的 server.xml 文件,要求各 tomcat 实例配置不能有重复的端口号
vim /usr/local/tomcat/tomcat2/conf/server.xml
<Server port="8006" shutdown="SHUTDOWN">        #22行,修改Server prot,默认为8005 -> 修改为8006
<Connector port="8081" protocol="HTTP/1.1"        #69行,修改Connector port,HTTP/1.1  默认为8080 -> 修改为8081
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />    #116行,修改Connector port AJP/1.3,
默认为8009 -> 修改为8010

修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量
vim /usr/local/tomcat/tomcat1/bin/startup.sh 
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
##添加以下内容
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1


vim /usr/local/tomcat/tomcat1/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1


vim /usr/local/tomcat/tomcat2/bin/startup.sh 
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2


vim /usr/local/tomcat/tomcat2/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2

配置tomcat01的测试页面

 
mkdir /usr/local/tomcat/tomcat1/webapps/test 
 
vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>tomcat01</title>   
</head>
<body>
<% out.println("tomcat01 running");%>
</body>
</html>

更进一步完整架构后面再说

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

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

相关文章

Linux系统管理:虚拟机ESXi安装

目录 一、理论 1.VMware Workstation 2.VMware vSphere Client 3.ESXi 二、实验 1.ESXi 7安装 一、理论 1.VMware Workstation 它是一款专业的虚拟机软件&#xff0c;可以在一台物理机上运行多个操作系统&#xff0c;支持Windows、Linux等操作系统&#xff0c;可以模拟…

使用selenium如何实现自动登录

回顾使用requests如何实现自动登录一文中&#xff0c;提到好多网站在我们登录过后&#xff0c;在之后的某段时间内访问该网页时&#xff0c;不会给出请登录的提示&#xff0c;时间到期后就会提示请登录&#xff01;这样在使用爬虫访问网页时还要登录&#xff0c;打乱我们的节奏…

item_get_sales-获取商品销量详情

一、接口参数说明&#xff1a; item_get_sales-获取商品销量详情&#xff0c;点击更多API调试&#xff0c;请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_get_sales 名称类型必须描述keyString是调用key&#xff08…

Spring的三种异常处理方式

1.SpringMVC 异常的处理流程 异常分为编译时异常和运行时异常&#xff0c;编译时异常我们 try-cache 进行捕获&#xff0c;捕获后自行处理&#xff0c;而运行时异常是不 可预期的&#xff0c;就需要规范编码来避免&#xff0c;在SpringMVC 中&#xff0c;不管是编译异常还是运行…

java:JDBC

文章目录 什么是JDBCJDBC使用步骤详解各个对象DriverManagerConnectionStatementResultSetPreparedStatement JDBC控制事务操作步骤示例 什么是JDBC 我们知道&#xff0c;数据库有很多种&#xff0c;比如 mysql&#xff0c;Oracle&#xff0c;DB2等等&#xff0c;如果每一种数…

C# WPF 中 外部图标引入iconfont,无法正常显示问题 【小白记录】

wpf iconfont 外部图标引入&#xff0c;无法正常显示问题。 1. 检查资源路径和引入格式是否正确2. 检查资源是否包含在程序集中 1. 检查资源路径和引入格式是否正确 正确的格式&#xff0c;注意字体文件 “xxxx.ttf” 应写为 “#xxxx” <TextBlock Text"&#xe7ae;…

经典人体模型SMPL介绍(一)

SMPL是马普所提出的经典人体模型&#xff0c;目前已成为姿态估计、人体重建等领域必不可少的基础先验。SMPL基于蒙皮和BlendShape实现&#xff0c;从数千个三维人体扫描结果得来&#xff0c;后通过PCA统计学习得来。 论文&#xff1a;SMPL: A Skinned Multi-Person Linear Mode…

2023连锁收银系统该如何选?值得推荐的5款连锁收银系统

现在不管是连锁店还是零售店&#xff0c;只要是开店做生意赚钱的&#xff0c;都少不了要和钱打交道&#xff0c;尤其是对连锁店来说&#xff0c;收银工作更是重中之重。 连锁店涉及的门店较多&#xff0c;必须要有一套足够优秀的连锁收银系统&#xff0c;才能做好每个门店的收银…

使用 `tailwindcss-patch@2` 来提取你的类名吧

使用 tailwindcss-patch2 来提取你的类名吧 使用 tailwindcss-patch2 来提取你的类名吧 安装使用方式 命令行 Cli 开始提取吧 Nodejs API 的方式来使用 配置 初始化 What’s next? tailwindcss-patch 是一个 tailwindcss 生态的扩展项目。也是 tailwindcss-mangle 项目重要…

2023年上半年网络工程师上午真题及答案解析

1.固态硬盘的存储介质是( )。 A.光盘 B.闪存 C.软盘 D.磁盘 2.虚拟存储技术把( )有机地结合起来使用&#xff0c;从而得到一个更大容量的“内存”。 A.内存与外存 B.Cache与内存 C.寄存器与Cache D.Cache与外存 3.下列接口协议中&…

找不到msvcp140.dll无法继续执行代码怎么解决?分享三个解决方法

当你在运行某个程序或游戏时遇到msvcp140.dll缺失的错误提示&#xff0c;你可能会感到困惑和烦恼。在修复msvcp140.dll的过程中&#xff0c;我遇到了一些挑战&#xff0c;但最终成功解决了这个问题。以下是我总结的三个解决方法&#xff0c;希望能帮助你解决这个问题。 找不到m…

Mongodb (四十一)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、概述 1.1 相关概念 1.2 特性 二、应用场景 三、安装 四、目录结构 五、默认数据库 六、 数据库操作 6.1 库操作 6.2 文档操作 七、MongoDB数据库备份 7.1 备…

小游戏扫雷实现教学(详解)

目录 【前言】 一、模块化程序设计&#xff08;多文件编程&#xff09;介绍 1.概述 2.传统编程的方式 3.模块化程序设计的方法 二、扫雷代码设计思路 三、扫雷代码设计 1.创建菜单函数 2.实现9x9扫雷 3.初始化棋盘 4.打印棋盘 5.随机布置雷的位置 6.排查雷的信息 7.回…

TEC2083BS-PD码转换器(解决博世矩阵控制PELCO派尔高球机的问题)

TEC2083BS-PD码转换器 使用说明 1.设备概述 控制码转换器在安防工程中起着非常重要的角色&#xff0c;随着高速球型摄像机在安防工程中大范围的使用&#xff0c;而高速球厂家都因为某些原因很少使用博世、飞利浦的协议。为此&#xff0c;工程商经常会遇到博世协议和PELCO协议之…

RabbitMQ工作流程详解

1 生产者发送消息的流程 (1)生产者连接RabbitMQ&#xff0c;建立TCP连接(Connection)&#xff0c;开启信道(Channel) (2)生产者声明一个Exchange (交换器)&#xff0c;并设置相关属性&#xff0c;比如交换器类型、是否持久化等 (3)生产者声明一个队列井设置相关属性&#xf…

Spring-Cloud-Loadblancer详细分析_3

前两篇文章介绍了加载过程&#xff0c;本文从Feign的入口开始分析执行过程&#xff0c;还是从FeignBlockingLoadBalancerClient.execute来入手 public class FeignBlockingLoadBalancerClient implements Client {private static final Log LOG LogFactory.getLog(FeignBlock…

Vue3实现图片懒加载及自定义懒加载指令

Vue3实现图片懒加载及自定义懒加载指令 前言1.使用vue3-lazyload插件2.自定义v-lazy懒加载指令2.1 使用VueUse2.2 使用IntersectionObserver 前言 图片懒加载是一种常见性能优化的方式&#xff0c;它只去加载可视区域图片&#xff0c;而不是在网页加载完毕后就立即加载所有图片…

集成DTM实现跨语言分布式事务V1.0

集成DTM实现跨语言分布式事务V1.0 简介 DTM是一款开源的分布式事务管理器&#xff0c;解决跨数据库、跨服务、跨语言栈更新数据的一致性问题。 通俗一点说&#xff0c;DTM提供跨服务事务能力&#xff0c;一组服务要么全部成功&#xff0c;要么全部回滚&#xff0c;避免只更新…

MIMO-NOMA系统MATLAB仿真实现

非正交多址接入&#xff08;NOMA&#xff09;技术可以打破传统的正交多址一个基本资源块由单用户独占的限制&#xff0c;通过在时域和频域的基础上开辟新的功率域维度&#xff0c;在相同的时频资源上通过功率复用技术允许同一个时频资源块由多个用户共享&#xff0c;有效提升了…

如何进行无线网络渗透测试?

今天我们将继续深入探讨Kali Linux的应用&#xff0c;这次我们将重点介绍如何使用Kali Linux进行无线网络渗透测试。无线网络渗透测试是评估无线网络安全性的重要步骤&#xff0c;而Kali Linux作为一款专业的渗透测试发行版&#xff0c;提供了丰富的工具来帮助你进行这项任务。…