nginx的反向代理和负载均衡

nginx的反向代理和负载均衡:

代理:客户端通过一个指定的服务器,访问其他服务器,请求和响应都由指定服务器来为客户端进行处理,这个指定的服务器就是代理服务器

代理的方式:

四层代理:四层就是传输层,基于tcp/ip协议进行代理转发。只能实现基于ip和端口号的负载均衡,四层代理无法获取http请求中的URL信息。只能对数据包转发,也就是流量转发

七层代理:基于http协议的应用层代理,代理的是http的请求和响应

客户端访问代理服务器,代理服务器接受客户端的http请求,然后由代理服务器将http请求转发到内部的一组服务器上进行处理

响应结果,也由代理服务器把响应结果返回给客户端,客户端并不知道自己请求的是代理服务器还是内部服务器。代理服务器可以隐藏内部服务器的真实ip

别名:七层反向代理

正向代理:VPN就是正向代理

正向代理。也是访问代理服务器,但是客户端知道访问的是代理,代理服务器的地址请求

四层代理和七层代理之间的区别:

1.转发速度:四层速度快,四层只是转发数据包,走的是内核态。因为它不负责处理http请求,也不对数据包做任何处理

七层相对慢,对http的协议进行处理,走的是用户态,需要一系列验证和处理流程,因此速度相对较慢

2.适用场景:四层代理用于需要处理大并发连接请求的场景,只是针对tcp或者udp流量的转发

七层代理不适合高并发(硬件的条件可以满足一些场景的高并发),需要对http请求进行深入处理和控制的一些场景。例如web应用程序的负载均衡

反向代理的作用:

1.负载均衡,可以把请求分配到后台多个服务器上,从而分担服务器的负载,可以提高系统的可用性和稳定性

2.缓存加速,会话保持

3.安全保护,请求的是代理,响应的也是代理,后台的真实服务器隐藏了,保证了架构的安全

4.简化整个系统的结构:代理服务器和几台后端服务器,就可以形成一个逻辑服务,这个服务架构可以随时的进行弹性伸缩

作为反向代理如何实现以及负载均衡的算法:

基于两个模块实现的:四层和七层

七层的模块:upstream只能定义在http的模块当中的全局配置里。不能写在server里面,也不能在location中

四层的模块:stream只能定义在全局模块当中

实验题:基于http的反向代理

然后重启

之后三台机子分别写不同的内容方便区分

(一定要回,很重要)负载均衡的算法:

1.nginx自带的默认算法叫轮询,最简单的算法,请求轮流的分配到后端的服务器

适用于后端服务器处理能力相近的情况,默认算法,可以不声明

2.加权轮询:给后端服务器赋予权重,在默认轮询算法的基础之上,实现处理能力更高的服务器可以分配到更多的请求

不是完全按照比例来进行分配,只是权重高的服务器被请求的次数相对较多

实验题:加权轮询实验,在上一个实验上加上weight=数字

3.最少连接数算法:配置了之后,会把请求转发到当前连接数最少的后端服务器上。避免请求都集中在处理能力更强的服务器上

一般是配置加权轮询一起使用

在工作当中,加权轮询和最小连接上算法,可以配合使用,满足绝大部分的日常需求

实验题:配置最少连接数算法:

4.ip_hash算法:根据客户端的ip地址计算出一个hash值,然后将请求发送到后端服务器,同一个客户端的请求会被分配到上一次转发的服务器。这就是nginx实现会话保持的方式

如果后台服务器数量发送变化,请求的服务器可能会转移。原有的会话保持就会消失。在工作中会有个封板期的原因

实验:

5.URL_HASH,根据客户端请求的URL计算一个hash值,然后将请求发送到后端服务器,如果每一次请求的URL地址相同,请求都会被分配到同一个服务器。

请求地址发生变化,轮询的服务器也可能发生变化。

实验:

http请求,可以实现基于域名的负载均衡

需要三台主机

实验:

第一台配置

proxy_set_header HOST $host

意思是将客户端的请求头当中的HOST字段,传给代理服务器

http1.1协议当中,客户端的请求头当中必须包含HOST字段,否则认为你是无效请求

proxy_set_header X-der

将客户端的真实IP地址赋给代理服务器,后端服务器会判断,如果你的地址是恶意攻击IP,直接把代理服务器屏蔽

这也是为什么博客和B站能看到你的IP地址

实验:如何进行流量分发来实现

四层不能使用ip_hash

只能使用加权轮询 ,和最少连接数

负载均衡:

反向代理

七层代理,处理http请求

四层代,就是ip+端口,只是转发数据包。不能对http协议做任何处理,也解析不了请求地址

负载均衡的算法:

nginx的负载均衡:

默认轮询 rr

加权轮询 weight=3

最小连接数 least_conn

ip_hash nginx实现会话保持

url hash

四层和七层之间的区别:

四层快 因为是内核态 是传输层

七层慢 因为是用户态 是应用层

七层主要用于http请求的场景

四层是转发数据包就可以使用四层

访问静态页面,四层可以满足,如果转发动态请求,用七层代理

负载均衡算法:七层都可以使用,四层只能用加权轮询以及最小连接数

upstream只能写在http的全局模块

stream要写在整个配置的全局当中,而且stream只能是ip+端口

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

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

相关文章

操作系统概述及发展史、Linux内核、发行版及应用领域

一、 操作系统(Operation System,OS) 裸机:没有安装操作系统的计算机 如果想在 裸机 上运行自己所编写的程序,就必须用机器语言书写程序如果计算机上安装了操作系统,就可以在操作系统上安装支持的高级语言…

python pyaudio实时读取音频数据并展示波形图

python pyaudio实时读取音频数据并展示波形图 下面代码可以驱动电脑接受声音数据,并实时展示音波图: import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation import pyaudio import wave import os import op…

面试官:说说synchronized与ReentrantLock的区别

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

质量小议35 -- SQL注入

已经记不得上次用到SQL注入是什么时候了,一些概念和操作已经模糊。 最近与人聊起SQL注入,重新翻阅,暂记于此。 重点:敏感信息、权限过大、未脱敏的输入/输出、协议、框架、数据包、明文、安全意识 SQL - Structured Query La…

力扣124. 二叉树中的最大路径和(java DFS解法)

Problem: 124. 二叉树中的最大路径和 文章目录 题目描述思路解题方法复杂度Code 题目描述 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经…

【C++】类和对象——const修饰成员函数和取地址操作符重载

在上篇博客中,我们已经对于日期类有了较为全面的实现,但是,还有一个问题,比如说,我给一个const修饰的日期类的对象 这个对象是不能调用我们上篇博客写的函数的,因为&d1是const Date*类型的&#xff…

备战春招——12.04 算法

哈希表 哈希表主要是使用 map、unordered_map、set、unorerdered_set、multi_,完成映射操作,主要是相应的函数。map和set是有序的,使用的是树的形式,unordered_map和unordered_set使用的是散列比表的,无序。 相应函数…

【Java】类和对象之超级详细的总结!!!

文章目录 前言1. 什么是面向对象?1.2面向过程和面向对象 2.类的定义和使用2.1什么是类?2.2类的定义格式2.3类的实例化2.3.1什么是实例化2.3.2类和对象的说明 3.this引用3.1为什么会有this3.2this的含义与性质3.3this的特性 4.构造方法4.1构造方法的概念4…

【VRTK】【VR开发】【Unity】10-连续移动

课程配套学习资源下载 https://download.csdn.net/download/weixin_41697242/88485426?spm=1001.2014.3001.5503 【概述】 连续移动与瞬移有如下不同: 连续移动不容易打断沉浸对于新手或者不适应者来说更容易晕动 我对玩家的建议:连续移动前后左右可以用摇杆,转向用自己…

低代码如何降低门槛、快速交付、实现可持续IT架构?

目录 低代码开发模式期望达成的目标 1.降低开发门槛 2.加快系统交付 3.建立可持续发展的IT架构 写在最后 低代码的概念,最早提出的时间是在2014年左右,随后一直处于上升期,随着前两年阿里、腾讯的相继入场,竞争逐步加大。低代…

设计简单高效的短链系统

目录 引言 1. 短链系统的原理 1.1 长链接生成短码 1.2 短码映射到长链接 1.3 短码重定向 1.4 过期短 URL 清理 2. 设计与实现 2.1 数据存储 2.2 短码生成 2.3 接口设计 2.4 安全性考虑 2.5 访问性能优化 引言 在当今数字化时代,人们对信息的分享需求不断…

市场缺口投资者应该怎么做? 昂首资本一招就能盈利

当在市场交易分析中,投资者发现市场缺口或者价格缺口的时候, 昂首资本问各位投资者应该怎么才能抓住机会盈利一波。 其实在技术分析中的这个术语指的是:前一根棒线的收盘价和下一根棒线的开盘价之间有差距的情况。例如,当做市商将…

【SpringBoot系列】SpringBoot时间字段格式化

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Allegro无法模块复用的解决办法

Allegro无法模块复用的解决办法 在用Allegro做PCB设计的时候,模块复用是使用的比较频繁的功能,对于有相同模块的单板,可以节省大量的时间。 模块复用的功能不细说,具体参考以前的文章。 有时会遇到模块复用的时候出现如下报错 无法匹配,有时如果因为Device而无法复用,就…

python提取通话记录中的时间信息

您需要安装适合中文的SpaCy模型。您可以通过运行 pip install spacypython -m spacy download zh_core_web_sm来安装和下载所需的模型。 import spacy# 加载中文模型 nlp spacy.load(zh_core_web_sm)# 示例电话记录文本 text """ Agent: 今天我们解决一下这…

Linux CentOS7 安装Docker

CentOS7安装Docker: Docker简介 Docker是一个开源的容器化平台,可帮助开发者轻松地创建、部署和运行应用程序。Docker使开发人员能够在一个独立的容器中打包应用程序及其依赖项,这样他们就可以轻松地将应用程序移植到任何其他环境中。Docke…

基础堆溢出原理与DWORD SHOOT实现

堆介绍 堆的数据结构与管理策略 程序员在使用堆时只需要做三件事情:申请一定大小的内存,使用内存,释放内存。 对于堆管理系统来说,响应程序的内存使用申请就意味着要在"杂乱"的堆区中"辨别"出哪些内存是正在…

Python实现交易策略评价指标-夏普比率

1.夏普比率的定义 在投资的过程中,仅关注策略的收益率是不够的,同时还需要关注承受的风险,也就是收益风险比。 夏普比率正是这样一个指标,它表示承担单位的风险会产生多少超额收益。用数学公式描述就是: S h a r p R…

【算法每日一练]-图论(保姆级教程 篇6(图上dp))#最大食物链 #游走

目录 题目:最大食物链 解法一: 解法二: 记忆化 题目:游走 思路: 题目:最大食物链 解法一: 我们标记f[i]是被f[x]捕食的点对应的类食物链数 不难得出: f[x]∑(f[i]) 首先从生…

206 反转链表

解题思路可以有两种方法:递归 or 迭代。 \qquad 迭代:通过使用for循环遍历,完成目标。方法直观,容易理解。 \qquad 递归:通过函数调用其自身,完成目标。递归最复杂、最重要的部分就是递归函数的构建&#…