当前位置: 首页 > news >正文

Nginx三大常用功能“反向代理,负载均衡,动静分离”

注意:以下案例在Windows系统计算机作为宿主机,Linux CentOS 作为虚拟机的环境中实现

一,Nginx配置实例-反向代理

1.反向代理 案例一

实现效果:使用nginx反向代理,访问 www.123.com 直接跳转到127.0.0.1:8080

准备工作
  1. 启动一个 tomcat
    在linux系统安装tomcat;将tomcat安装文件放到liunx系统/opt中,解压;进入tomcat的bin目录中,./startup.sh启动tomcat服务器 ,使用默认端口8080

  2. linux本机访问:localhost:8080

  3. 在windows系统中通过浏览器访问tomcat服务器,注意防火墙或开放端口

  4. 映射域名,通过修改本地 C:/Windows/System32/drivers/etc/hosts 文件,将www.123.com映射到 192.168.137.129
    在这里插入图片描述

  5. 配置完成之后,访问www.123.com:8080
    现在,我们如何做到访问 www.123.com 便可以跳转到 Tomcat初始界面呢?
    这里就要用到 Nginx的反向代理
    nginx.conf 配置文件中增加如下配置:
    在这里插入图片描述

2.反向代理 案例二

实现效果:使用nginx反向代理,根据访问的路径跳转到不同端口服务

nginx监听端口为9000
访问 http://127.0.0.1:9000/edu/ 直接跳转到127.0.0.1:8080
访问http://127.0.0.1:9000/vod/ 直接跳转到127.0.0.1:8081

准备工作

第1步,准备两个tomcat,一个8080端口,一个8081端口,并准备好测试的页面
webapps/edu/index.html 页面内容:8080!!
webapps/vod/index.html 页面内容:8081!!
由于一个ip服务器上启动两个tomcat,端口不能相同。所以,需要修改端口:22行8005->9005;69行8080->8081;

第2步,修改nginx的配置文件,在http块中添加server{}
在这里插入图片描述
访问测试:
在这里插入图片描述
在这里插入图片描述

这里对location指令做一下说明:
该指令用于匹配 URL。
语法如下:
在这里插入图片描述

1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~*:用*于表示 uri 包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。
*注意:如果 uri 包含正则表达式,则必须要有~或者 ~*标识。

二,Nginx配置实例-负载均衡

实现效果

浏览器地址栏输入地址 http://192.168.137.129/edu/a.html,负载均衡效果,将请求平均分配到80808081两台服务器上。

准备工作

(1)准备两台tomcat服务器,一台8080,一台8081
(2)在两台tomcat里面webapps目录中,创建名称是edu文件夹,在edu文件夹中创建页面a.html(让a.html内容不一样,查看效果),用于测试

负载均衡配置

upstream称为上游服务器,即真实处理请求的业务服务器。
在这里插入图片描述
在这里插入图片描述

nginx分配服务器策略

随着互联网信息的爆炸性增长,负载均衡(load balance)已经不再是一个很陌生的话题,顾名思义,负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户很好的体验。快速增长的访问量和数据流量催生了各式各样的负载均衡产品,很多专业的负载均衡硬件提供了很好的功能,但却价格不菲,这使得负载均衡软件大受欢迎,nginx就是其中的一个,在linux下有Nginx、LVS、Haproxy等等服务可以提供负载均衡服务,而且Nginx提供了几种分配方式(策略):

1. 轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
在这里插入图片描述

2. weight

weight代表权,重默认为1,权重越高被分配的客户端越多
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 例如:

upstream server_pool{   
server 192.168.10.1 weight=1;    
server 192.168.10.2 weight=2; 
server 192.168.10.3 weight=3;   
}

在这里插入图片描述

3. ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。 例如:

upstream server_pool{   
ip_hash;    
server 192.168.10.1:80;   
server 192.168.10.2:80;  
server 192.168.10.3:80;  
}

在这里插入图片描述

4. fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream server_pool{   
server 192.168.10.1:80;    
server 192.168.10.2:80;
server 192.168.10.3:80;
fair;    
}
5. 其他参数

在这里插入图片描述

三,Nginx配置实例-动静分离

Nginx 动静分离简单来说就是把动态请求静态请求分开,Nginx 处理静态请求,Tomcat处理动态请求。
动静分离从目前实现角度来讲大致分为两种:

  • 一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;
  • 另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。
    通过 location 指定不同的后缀名实现不同的请求转发。

准备

项目静态资源准备
在这里插入图片描述
在这里插入图片描述

nginx配置

找到nginx安装目录,打开/conf/nginx.conf配置文件
在这里插入图片描述
添加监听端口、访问服务名字;重点是添加location;
最后检查 Nginx 配置是否正确即可,然后测试动静分离是否成功。

测试一

(1)浏览器中输入地址:http://192.168.137.129/image/01.jpg

  • 因为配置文件中设置了autoindex on,所以通过访问目录时可以列出该目录问题。注意:文件路径的斜线
    在这里插入图片描述
    在这里插入图片描述

(2)在浏览器地址栏输入地址:http://192.168.137.129/www/a.html
在这里插入图片描述

测试二

(1)如果开启反向代理,访问tomcat动态资源jsp,jsp中引用的静态资源可以从nginx服务器中进行加载。
在这里插入图片描述

(2)建立jsp部署到tomcat8080/webapps/edu目录下;tomcat8081/webapps/edu目录下

jsp内容如下
123
在这里插入图片描述

(3)测试结果

测试
在这里插入图片描述
在这里插入图片描述

相关文章:

Nginx三大常用功能“反向代理,负载均衡,动静分离”

注意:以下案例在Windows系统计算机作为宿主机,Linux CentOS 作为虚拟机的环境中实现 一,Nginx配置实例-反向代理 1.反向代理 案例一 实现效果:使用nginx反向代理,访问 www.123.com 直接跳转到127.0.0.1:8080 准备工…...

类方法介绍、使用细节

...

Java SpringBoot中优雅地判断一个对象是否为空

在Java中,可以使用以下方法优雅地判断一个对象是否为空: 使用Objects.isNull()方法判断对象是否为空: import java.util.Objects;if (Objects.isNull(obj)) {// obj为空的处理逻辑 }使用Optional类优雅地处理可能为空的对象: impo…...

算法——矩阵:对于边界元素的处理

. - 力扣(LeetCode) 题目简述:扫雷,点击一个格子,返回整个地图的下一个状态。 对于边界元素,可以设置两个数组,index_row,index_col,遍历到一个格子需要搜索其周围格子…...

Git分支提交时自动大写 fatal: the remote end hung up unexpectedly

先说结论: 进入 .git/refs/heads目录,会看到Feature文件夹,重命名为feature即可。 表现: 通过终端命令创建的分支 git checkout -b feature/name 使用git push后自动变成了Feature/name 并且有时候在本地创建feature/1234567…...

隐私计算实训营第七讲-隐语SCQL的架构详细拆解

隐私计算实训营第七讲-隐语SCQL的架构详细拆解 文章目录 隐私计算实训营第七讲-隐语SCQL的架构详细拆解1.SCQL Overview1.1 多方数据分析场景1.2 多方数据分析技术路线1.2.1 TEE SQL方案1.2.2 MPC SQL方案 1.3 Secure Collaborative Query Language(SCQL)1.3.1 SCQL 系统组件1.…...

Android JNI开发定义全局变量

要在 C 文件中设置一个 string 类型的全局变量,让其他 C 文件都可以访问,并且可以通过 JNI 方法修改这个变量,可以按照以下步骤进行操作 定义全局变量: 在一个头文件(比如 common.h)中定义一个全局的 strin…...

docker容器部署gitlab的runner的shell模式注册下job中无法使用docker指令

引言 现需通过gitlab-runner来构建jar部署的镜像,发现在job中无法使用docker指令,解决的过程中出现一系列异常,在此做个问题解决的记录。 内容 通过docker-compose部署 name: java-env services:env-gitlab-runner:restart: alwaysimage: env/gitlab-runner-java:latest…...

【SpringCloud】Zuul网关中心 代码详细介绍

Zuul是Spring Cloud中的一个API网关组件,它负责处理服务路由、监控、弹性、安全等API网关的核心功能。Zuul在Spring Cloud Netflix套件中是一个重要的组件,但需要注意的是,随着Spring Cloud的不断发展,Zuul已经被Spring Cloud Gat…...

Delphi D12中实现安卓中文语音合成(中文朗读)不用第三方控件

Delphi开发一个可以朗读中文的APP就非常的简单。 本文给大家介绍使用Delphi开发基于安卓原生的TTS(中文语音合成),将文字转语音实现中文的朗读。APP运行后,需要手机上已安装语音引擎。如果您手机上已安装并设置了语音引擎&#xf…...

设计模式 - Provider 模式

在某些情况下,我们希望为应用程序中的许多(如果不是全部)组件提供数据。尽管我们可以使用 props 将数据传递给组件,但如果应用程序中的几乎所有组件都需要访问 prop 的值,这可能很难做到。 我们经常遇到所谓的属性钻探…...

R语言颜色细分

1.如何对R语言中两种颜色之间进行细分 2.代码&#xff1a; x <- colorRampPalette(c("#FC8D62","#FDEAE6"))(12) #打印向量值 # 按字典顺序排序颜色值 x_sorted <- sort(x,decreasing TRUE)# 打印排序后的颜色值 print(x_sorted)#展示颜色 scales:…...

面向返回编程ROP问题及挑战

像我们描述的执行权限等功能已经使执行任意代码变得越来越困难。这意味着攻击者使用其他方法&#xff0c;比如面向返回编程&#xff08;ROP&#xff09;。ROP利用了许多现代系统中软件堆栈的规模。攻击者分析系统中的软件&#xff0c;寻找小工具&#xff08;gadgets&#xff09…...

vscode shadertoy插件,非常方便的glsl着色器编写工具

很著名的shadertoy网站&#xff0c;集合了非常多大神利用数学写出美妙的shader效果。像shadertoy创始人之一的IQ大神它在这方面有很多的建树。他的利用光线步进和躁声可以创建很多不可思议的3D场景。 vscode有一件shadertoy的插件&#xff0c;安装后可以新建一个*.glsl文件&am…...

网络请求避坑,私有网络请求(Private Network Access)

前言 网络请求&#xff0c;大家肯定熟悉的不能再熟悉&#xff0c;网络请求失败&#xff0c;大家也肯定很熟悉。排查网络请求&#xff0c;也是我们必备的技能&#xff0c;对不&#xff0c;兄弟。 我坦言&#xff0c;最怕两种网络请求失败。 第一种&#xff1a;PC端模拟没有异常…...

AVL树和红黑树

AVL树和红黑树 AVL树理论代码实现 红黑树理论代码实现 AVL树 理论 我们知道二叉搜索树拥有极高的搜索效率&#xff0c;但当二叉搜索树退化成单支时&#xff0c;其查找效率会大幅下降&#xff0c;因此我们需要避免其出现单支的情况&#xff0c;并且尽可能让其接近满二叉树。解…...

多线程入门

多线程 Thread 现在的Thread中的run方法&#xff0c;已经被实现了&#xff0c;所以已经不需要实现了 操作 继承 extends Thread方法 重写run方法 start() 案例 public class ThreadTest extends Thread{public void run() {for (int i 0; i < 100; i) {System.out.…...

#!/bin/sh和#!/bin/bash的区别

前言&#xff1a;都是脚本文件中的 shebang&#xff08;也称为 hashbang&#xff09;行&#xff0c;用于指定脚本文件的解释器 解释&#xff1a; #!/bin/sh&#xff1a;这行告诉操作系统使用 /bin/sh 这个解释器来执行脚本。/bin/sh 是一个标准的 Unix Shell&#xff0c;通常是…...

腾讯云(CVM)托管进行权限维持

前言 刚好看到一个师傅分享了一个阿里云ECS实战攻防&#xff0c;然后想到了同样利用腾讯云CVM的托管亦可实现在实战攻防中的权限维持。 简介 腾讯云自动化助手&#xff08;TencentCloud Automation Tools&#xff0c;TAT&#xff09;是一个原生运维部署工具&#xff0c;它可…...

STM32-03基于HAL库(CubeMX+MDK+Proteus)输入检测案例(按键控制LED)

文章目录 一、功能需求分析二、Proteus绘制电路原理图三、STMCubeMX 配置引脚及模式&#xff0c;生成代码四、MDK打开生成项目&#xff0c;编写HAL库的按键检测代码五、运行仿真程序&#xff0c;调试代码 一、功能需求分析 搭建完成开发STM32开发环境之后&#xff0c;开始GPIO…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...