Nginx的核心!!! 负载均衡、反向代理

news2025/1/12 20:03:25

目录

负载均衡

1.轮询

2.最少连接数

3.IP哈希

4.加权轮询

5.最少时间

6.一致性哈希

反向代理

测试


之前讲过Nginx 的简介和正则表达式,那些都是Nginx较为基础的操作,Nginx 最重要的最核心的功能,当属反向代理和负载均衡了。

负载均衡

负载均衡可能好理解一点,从字面上来看,就是某个服务器不堪重负的时候,将它的请求均衡一下,前提是有多个后端服务器,如果只有一个那自然均衡不了,一般情况下都不会单挂的。

Nginx 提供多种负载均衡模式进行分流,常见的有

1.轮询

轮询就是假设现在有A、B、C 三台服务器,然后客户端发来了12345678910条请求,这些请求会被均匀地分布给三台服务器,1->A,2->B,3->C……以此类推,无论服务器是否负载,响应是快还是慢。

配置:

upstream backend   #这是负载均衡的名字可以自定 {

        server A.example.com;     #这里也可以用服务器的ip地址

        server B.example.com;

        server C.example.com;

}

2.最少连接数

字面意思,还是那三台服务器,然后A 有5个请求,B有3个请求,C有一个请求,那么接下来的两个请求都会被分配到C服务器,简而言之就是现在谁最不忙谁来接待一下。

配置:

upstream backend {

        least_conn;

        server A.example.com;

        server B.example.com;

        server C.example.com;

}

3.IP哈希

ip哈希就是通过计算,将客户端的ip地址换算成哈希值,然后将固定的哈希值对应分配给某一台服务器,该客户端的请求只会分配给这台服务器,有助于会话保持

配置:

upstream backend {

        ip_hash;

        server A.example.com;

        server B.example.com;

        server C.example.com;

}

4.加权轮询

加权轮询就是为每台服务器设置一个权重,权重大的服务器会被分配更多的请求

配置:

upstream backend {

        server A.example.com weight=3;

        server B.example.com weight=5;

        server C.example.com weight=4;

}

5.最少时间

最少时间也是顾名思义,将请求分配给响应时间最短的服务器,(注意:只有Nginx1.15.3及及以后的版本才可使用)

配置:

upstream backend {

        least_time header;

        server A.example.com;

        server B.example.com;

        server C.example.com;

}

6.一致性哈希

一致性哈希可以保证当集群中某台服务器故障时,只有部分请求会重新分配到其他服务器,而不是全部重新分配,在缓存等场景中非常有用。

配置:

upstream backend {

        hash $request_uri consistent;

        server A.example.com;

        server B.example.com;

        server C.example.com;

}

上面这些都是常用的负载均衡模式,都是在Nginx 主配置文件下,http{}模块内进行配置

反向代理

要想了解何为反向代理,首先先知道什么是正向代理。上过网的同学肯定知道,我们平时访问一些网站,由于一些原因是无法访问的,此时如果我们非要访问这个网站,那么可以通过向可以访问这个网站的代理服务器发送请求,然后代理服务器去访问这个网站,将网站返回的数据发送给你(客户端),这个过程就是正向代理,代理服务器是帮助客户端的

那么反向代理就是与正向代理相反,代理服务器是帮助服务端的,也就是你要访问的网站,这里的帮助并不是助纣为虐那种帮助,就是帮助处理需求那种帮助。我们访问的大型网站,比如淘宝京东,一般都不可能只有一个服务器,会有多个服务器,此时代理服务器会统一接收服务器返回的请求,返还给客户端,一方面隐藏了服务器信息,而客户端方面只知道自己访问的是淘宝京东,并不会知道是哪一个服务器。

测试

真实环境不方便演示,这里我们用几台虚拟机来模拟真实环境,对负载均衡进行测试

我的四台机器

172.16.233.101~172.16.233.104

101作为nginx 服务器,另外两台作为tomcat服务器

nginx 应该是安装好了的,此处不再教如何安装nginx,我的博客有nginx安装过程

nginx 服务器直接启动nginx 就行了

下面部署2台Tomcat 应用服务器

tomcat 部署需要jdk

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

vim /etc/profile

export JAVA_HOME=/usr/local/jdk1.8.0_91

export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

export PATH=${JAVA_HOME}/bin:$PATH

source /etc/profile

tar zxvf apache-tomcat-8.5.16.tar.gz

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

/usr/local/tomcat/bin/shutdown.sh

/usr/local/tomcat/bin/startup.sh

接下来是动静分离配置

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             同样输入如下内容↓

<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

另两台tomcat 服务器也事完全一样的配置

/usr/local/tomcat/webapps/test/index.jsp  的内容 稍稍修改,分别改为2和3

<% out.println("动态页面 2,NameBright - Domain Expired");%>

<% out.println("动态页面 3,http://www.test3.com");%>

接下来再回到nginx服务器

echo '<html><body><h1>这是静态页面</h1></body></html>' > /usr/local/nginx/html/index.html

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

在http模块下,大概就gzip 后面          配置负载均衡的服务器列表,这里权重我都填1,相当于轮询

upstream tomcat_server {
    server 172.16.233.102:8080 weight=1;
    server 172.16.233.103:8080 weight=1;
    server 172.16.233.104:8080 weight=1;
}

server  模块下添加             #配置Nginx处理动态页面请求

charset utf-8;  

 location ~ .*\.jsp$ {
        proxy_pass http://tomcat_server;

}
    
    location / {
        root html;
        index index.html index.htm;
    }

如果出现乱码得在server 模块下添加

配置完成后我们重新加载nginx服务

访问172.16.233.101/index.jsp(nginx 服务器ip)

多刷新几次,应该是在三个页面之间来回跳

这样的话我们负载均衡就算是做完了

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

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

相关文章

YOLOv8实例分割+双目相机实现物体尺寸测量

1&#xff0c;YOLOv8实例分割原理介绍 YOLOv8是YOLO系列的最新版本&#xff0c;它在目标检测和实例分割方面都进行了显著的改进和创新。以下是YOLOv8实例分割原理的一些关键点&#xff1a; 先进的骨干和颈部架构&#xff1a;YOLOv8采用了先进的骨干和颈部架构来提高特征提取和物…

分治,1875C - Jellyfish and Green Apple

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1875C - Jellyfish and Green Apple 二、解题报告 1、思路分析 n 个苹果…

小阿轩yx-Kubernetes Pod入门

小阿轩yx-Kubernetes Pod入门 前言 Kubernetes 中 一个重要的概念就是 Pod&#xff08;豆荚&#xff09;并不直接管理容器&#xff0c;它的最小管理单元叫做 Pod。 Docker 应用中 把一个应用程序封装在一个镜像中&#xff0c;之后启动这个镜像并映射个宿主机端口号&#x…

03、Redis实战:商户查询缓存、缓存更新策略、缓存穿透、缓存雪崩、缓存击穿

2、商户查询缓存 2.1 什么是缓存? 什么是缓存? 就像自行车,越野车的避震器 举个例子:越野车,山地自行车,都拥有"避震器",防止车体加速后因惯性,在酷似"U"字母的地形上飞跃,硬着陆导致的损害,像个弹簧一样; 同样,实际开发中,系统也需要"避震器&qu…

2、Unity【基础】Mono中的重要内容

Unity基础 MonoBehavior中的重要内容 文章目录 Mono中的重要内容1、延迟函数1、延迟函数概念2、延迟函数使用3、延迟函数受对象失活销毁影响思考1 利用延时函数实现计时器思考2 延时销毁 2、协同程序1、Unity是否支持多线程2、协同程序概念3、协同程序和线程的区别4、协程的使用…

APP架构设计_1.官方应用架构指南

1.官方应用架构指南 1.1架构的原则 应用架构定义了应用的各个部分之间的界限以及每个部分应承担的职责。谷歌建议按照以下原则设计应用架构。 分离关注点通过数据模型驱动界面单一数据源单向数据流 1.2谷歌推荐的应用架构 每个应用应至少有两个层&#xff1a; 界面层 - 在屏…

近视防控明星:蔡司小乐圆中期临床数据详解

近视防控明星&#xff1a;蔡司小乐圆中期临床数据详解 小乐圆镜片作为近视防控镜片里的明星产品&#xff0c;从22年5月上市以来防控效果就一直备受大家的关注。而最近中期临床试验的结果&#xff0c;给家长孩子吃了一颗定心丸。 本次实验中&#xff0c;240位受试者被随机分成三…

基于springboot框架的电影订票系统_wqc3k

TOC springboot611基于springboot框架的电影订票系统_wqc3k--论文 绪 论 1.1研究背景和意义 随着科学技术的不断发展&#xff0c;计算机现在已经成为了社会的必需品&#xff0c;人们通过网络可以获得海量的信息&#xff0c;这些信息可以和各行各业进行关联&#xff0c;电影…

你应该停止使用的 7 个已弃用的 Python 库

欢迎来到雲闪世界。升级您的 Python 工具包&#xff1a;发现 7 个应停止使用的过时库以及替代它们的功能。最近&#xff0c;我回顾了 Python 的新特性&#xff0c;发现每个版本都引入了创新&#xff0c;使我们的日常开发工作变得更加轻松。 这让我意识到科技是一门永无止境的艺…

8.21 QT

1.思维导图 2. 服务器端 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer>//服务器类 #include <QMessageBox> #include <QDebug> #include <QList> #include <QTcpSocket>QT_BEGIN_NAMESPACE names…

免费高画质提取PPT/Word/Excel中的图片工具

下载地址&#xff1a;https://pan.quark.cn/s/134ccc35b8a2 软件简介&#xff1a; 好不容易搞到一个几十上百MB的ppt&#xff0c;想导出里面的图片进行二次加工&#xff0c;却被ppt超低画质的图片另存为功能劝退&#xff0c;明知里面全是高清图片&#xff0c;走时却是两手空空…

【C++从练气到飞升】14---深入浅出继承

&#x1f388;个人主页&#xff1a;库库的里昂 ✨收录专栏&#xff1a;C从练气到飞升 &#x1f389;鸟欲高飞先振翅&#xff0c;人求上进先读书&#x1f389; 目录 ⛳️推荐 一、继承的概念及定义 1.1 继承的概念 1.2 继承定义 1.2.1 定义格式 1.2.2 继承方式和访问限定符…

重新认识AbstractQueuedSynchronizer

开篇之前&#xff0c;烦请诸位允许我附庸风雅一次。近期因诸事繁杂&#xff0c;心情颇低落&#xff0c;遂于喜马拉雅APP中收听《老子》一文。其中的第八十一章《结天道》一文于我感悟颇深&#xff1a;和大怨&#xff0c;必有余怨&#xff0c;报怨以德&#xff0c;焉可以为善&am…

C++,std::bind 详解

文章目录 1. 概述2. 基本用法2.1 使用占位符2.2 示例 3. 总结 1. 概述 std::bind 是 C11 引入的一个功能&#xff0c;它允许你将函数&#xff08;或成员函数、函数对象&#xff09;与其参数绑定&#xff0c;生成一个新的可调用对象。这个功能在需要将函数及其参数一起传递给其…

DNF攻略:护石符文体系辅助详解,VMOS云手机助攻核心玩法!

在DNF游戏中&#xff0c;护石符文系统是提升角色实力的重要部分。当前版本中&#xff0c;护石符文体系经过了优化&#xff0c;使得获取方式更加便捷。以下是护石符文体系的详细介绍&#xff0c;以及如何使用VMOS云手机来更高效地管理和利用这一系统。 一、护石符文体系简介 护…

HarmonyOS 地图服务:深度解析其丰富功能与精准导航实力

目录 前期准备打造个性化地图&#xff1a;聚焦创建地图功能导入Map Kit相关模块通过MapOptions初始化地图切换地图类型设置地图中心点及层级展示定位按钮展示比例尺指定地图的日间夜间模式 通过MapComponentController对象方法控制地图切换地图类型开启3D建筑图层在指定的持续时…

【安当产品应用案例100集】008-UKEY在工业自动化数据传输中应用

工业自动化中的数据传输是确保生产过程高效、稳定运行的关键环节。工业自动化系统中&#xff0c;一般会有一个远程的客户端&#xff0c;负责将各个传感器、控制器等设备产生的信息传递到服务端&#xff0c;以实现生产过程的自动化控制和监控。它对于提高生产效率、降低生产成本…

SQL Server 2017上服务端设置强制加密启用SSL

在数据库服务端设置&#xff0c;强制所有客户端使用 SSL&#xff0c;设置完后&#xff0c;后续客户端所有连接&#xff0c;都将以密文传送&#xff0c;不论客户端是否指定安全连接&#xff08;即EncryptTrue/False&#xff09; 一、服务端强制加密使用 SSL 1.在数据库服务器上…

C++ 模板进阶知识

目录 一. 非类型模板参数 与类型模板参数确认的区别 何时确认 确认方式 二. 模板的特化 1. 概念 2. 函数模板特化 3. 类模板特化 3.1 全特化 3.2 偏特化 (1). 部分特化 (2). 进一步限制 4. 实际应用 三. 模板分离编译 1. 概念 2. 模板的分离编译 3. 解决方法 四…

【学习笔记】STM32F407探索者HAL库开发(一)STM32F4资源概要

【学习笔记】STM32F407探索者HAL库开发&#xff08;一&#xff09;STM32F4资源概要 1 硬件资源2 STM32命名规则3 STM32数据手册3.1 数据手册各章节内容概要3.2 引脚分布3.3 引脚定义3.4 引脚定义表的具体说明 1 硬件资源 STM32F407ZGT6具体的 内部资源如表 资源数量资源数量内…