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

目录

负载均衡

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.rhkb.cn/news/410266.html

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

相关文章

统一 transformer 与 diffusion !Meta 融合新方法剑指下一代多模态王者

本文引入了 Transfusion&#xff0c;这是一种可以在离散和连续数据上训练多模态模型的方法。 来源丨机器之心 一般来说&#xff0c;多模态生成模型需要能够感知、处理和生成离散元素&#xff08;如文本或代码&#xff09;和连续元素&#xff08;如图像、音频和视频数据&#xf…

【操作系统】实验:文件系统

目录 一、实验目的 二、实验要求 三、实验步骤 四、核心代码 五、记录与处理 六、思考 七、完整报告和成果文件提取链接 一、实验目的 1、掌握文件系统的基本结构和文件系统的管理方法 2、加深对两级文件目录认识和理解 3、对文件操作的系统命令实质内容和执行过程深入…

Python实现等距映射(ISOMAP)降维算法

目录 Python实现等距映射&#xff08;ISOMAP&#xff09;降维算法的博客引言ISOMAP算法原理ISOMAP的优势与局限Python实现ISOMAP算法1. 创建ISOMAP类2. 在瑞士卷数据集上应用ISOMAP3. 结果分析 总结运行结果 Python实现等距映射&#xff08;ISOMAP&#xff09;降维算法的博客 …

NS2582 同步升压双节锂电池充电管理 IC

1 特性  最大 2A 输出同步开关型升压充电器  升压效率可高达 90% 以上  内置电池短路 / 涓流 / 恒流 / 恒压模式  0.5% 电池恒压模式电压精度  支持 LED 充电状态指示  支持充电电流外部可调  支持输入适配器 DPM 功能  外置 EN 使能…

探索Python的Excel力量:openpyxl库的奥秘

文章目录 探索Python的Excel力量&#xff1a;openpyxl库的奥秘背景&#xff1a;为什么选择openpyxl&#xff1f;库简介&#xff1a;openpyxl是什么&#xff1f;安装指南&#xff1a;如何安装openpyxl&#xff1f;快速上手&#xff1a;五个基本函数实战演练&#xff1a;三个应用…

Adobe Dreamweaver(DW)网页代码编辑器win/mac软件安装下载

一、Adobe DW软件概览 1.1 DW软件简介 Adobe Dreamweaver&#xff08;简称DW&#xff09;是一款功能强大的网页代码编辑器&#xff0c;由Adobe公司开发并维护。其全称为“Adobe Dreamweaver”&#xff0c;中文译为“梦想编织者”。DW集网页制作和管理网站于一身&#xff0c;支…

Ubuntu系统使用Docker部署中文版trilium并实现远程编辑笔记

文章目录 前言1. 安装docker与docker-compose2. 启动容器运行镜像3. 本地访问测试4.安装内网穿透5. 创建公网地址6. 创建固定公网地址 前言 今天和大家分享一款在G站获得了26K的强大的开源在线协作笔记软件&#xff0c;Trilium Notes的中文版如何在Linux环境使用docker本地部署…

代码随想录第十九天 | 110.平衡二叉树,257. 二叉树的所有路径,404.左叶子之和,222. 完全二叉树的节点个数

110. 平衡二叉树 第一想法&#xff1a;首先要明确平衡二叉树的定义&#xff1f;左右节点的高度差不超过1&#xff1f;不会概念感觉无法下手... 返回参数返回int,为了标记已经不是平衡二叉树&#xff0c;用-1作标记 int traversal(TreeNode* root){if(rootnullptr) return 0;…

量化需求的业务价值 常见6种方法

量化需求的业务价值可以帮助项目团队更好地理解需求的重要性&#xff0c;并据此做出明智的决策。如果没有明确的量化目标&#xff0c;团队难以做出基于数据的决策&#xff0c;可能导致项目方向模糊&#xff0c;资源分配不当&#xff0c;导致项目进度难以把控&#xff0c;延误交…

平安银行“平安财富杯”高尔夫青少年冠军赛盛大举行,各组冠军精彩角逐实力尽显

今年夏天&#xff0c;巴黎体育盛会聚集了全球目光&#xff0c;中国选手林希妤斩获女子高尔夫球铜牌&#xff0c;追平中国女子高尔夫球历史最佳奥运战绩&#xff0c;让球迷大呼过瘾。奥运会结束后&#xff0c;比赛的热情在中原大地继续上演。8月22日&#xff0c;2024年平安银行“…

Shopify/shopline等独立站paypal快速提现到国内银行卡

做shopify/shopline/shopyy/shoplazza独立站用得最多的收款方式为paypal。 下面介绍如何把paypal里面的资金提现到我们国内银行卡&#xff0c;收款工具是GeeWallet。 1、注册GeeWallet注册入口 2、打开链接&#xff0c;填入手机号或者邮箱&#xff0c;点击立即注册 3、在注册…

【软件使用-MEGA】报错及解决方法

报错1&#xff1a;Error: MEGA has detected duplicate taxa labels. (in line 370) **************************************************************************** ; Please note the following important messages: ; **********************************…

学习之数据库相关概念

数据库相关概念 主流的关系型数据库管理系统&#xff1a;

如何使用ssm实现基于jsp的快递管理系统的开发

TOC ssm226基于jsp的快递管理系统的开发jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规…

力扣刷题(复习版)

文章目录 题目&#xff1a;最大重复子字符串题解 题目&#xff1a; 面试题 16.07. 最大数值题解 题目&#xff1a; 最大字符串配对数目题解 题目&#xff1a; 字符串中第二大的数字题解 题目&#xff1a; 统计最大组的数目题解 题目&#xff1a; 删除每行中的最大值题解 总结 题…

Commons Lang库中,StringUtils.isBlank()和StringUtils.isEmpty()区别

在Apache Commons Lang库中&#xff0c;StringUtils.isBlank()和StringUtils.isEmpty()方法都是用来判断字符串是否为空或者空白的。它们的主要区别在于处理空格的方式上。 StringUtils.isEmpty(String str): 这个方法会返回true当字符串为null或者长度为0时。也就是说&#xf…

酸敏感多肽在药物递送方面的作用机制及其应用

摘要: 作为一类新型的递送载体&#xff0c;多肽具有丰富的生物活性、较低的免疫原性及良好的生物相容性&#xff0c;近年来利用多肽递送药物或基因的研究得到广泛关注。其中&#xff0c;具有酸敏感性的多肽&#xff0c;在肿瘤微环境或溶酶体的弱酸性条件下可以产生二级结构的改…

【bug】可图文生图模型 KolorsPipeline IndexError: list index out of range

【bug】可图文生图模型 KolorsPipeline IndexError: list index out of range 环境 linux diffusers 0.30.0问题详情 报错详情 from diffusers import KolorsPipelineTraceback (most recent call last):File "Kolors/demo.py", line 6, in <module>pi…

Circuitjs 利用标签(label)简化电路连线

在使用 circuitjs 绘制电路的过程中, 一旦电路变得复杂, 连线众多, 然后各种交叉就不可避免, 给人一种凌乱的感觉, 而某些跨越长距离的连线连接起来也特别麻烦, 后续如果要调整也特别繁琐. 为解决这些问题, 需要引入一种 虚拟连接 的方式, 简单讲就是在要连接的两头用同样的名…

Web-ssrfme

文章目录 环境分析攻击 环境 首先下载资源包&#xff0c;Ubuntu通过docker拉取环境。 docker-compose up -d分析 <?php highlight_file(__file__); function curl($url){ $ch curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_HEADER, 0);e…