【Nginx】三、Nginx实现四层负载均衡Nginx实现限流防盗链流量镜像

news/2024/5/19 11:18:18/文章来源:https://blog.csdn.net/weixin_43333483/article/details/127348111

Nginx实现四层负载均衡

  • 一、Nginx实现四层负载均衡
    • 1、四层负载均衡与七层负载均衡区别
    • 2、Nginx四层负载均衡配置
    • 3、SocketTool工具
    • 4、TCP&UDPDebug工具
  • 二、Nginx实现限流
  • 三、Nginx实现防盗链
  • 四、Nginx流量镜像

一、Nginx实现四层负载均衡

我们之前介绍的HTTP负载均衡,叫做“七层负载均衡”,工作在第七层“应用层”,而TCP负载均衡,就是我们通常所说的“四层负载均衡”,工作在“网络层”和“传输层”,例如,LVS(Linux Virtual Server,Linux虚拟服务)和F5(一种硬件负载均衡设备)、haproxy等,都属于“四层负载均衡”;
在这里插入图片描述

在这里插入图片描述

1、四层负载均衡与七层负载均衡区别

四层负载均衡,在网络模型中的传输层中,基于主要是基于tcp协议报文实现负载均衡(比如LVS、haproxy就是四层负载均衡器),使用改写报文的源地址和目的地址;
七层负载均衡,在网络模型中应用层中,基于URL或者HTTP协议实现负载均衡,Web服务器;

从nginx 1.9.0版本开发支持基于tcp的四层负载均衡,该版本增加了 stream 模块用于一般的 TCP 代理和负载均衡,ngx_stream_core_module 这个模块在1.9.0版本后被启用,但是并不会默认安装,需要在编译时通过指定 --with-stream 参数来激活这个模块;

./configure --help--with-stream    enable TCP/UDP proxy module./configure --with-http_ssl_module --with-streammake

然后在 objs 目录下得到nginx的可执行程序;
说明文档:
http://nginx.org/en/docs/stream/ngx_stream_upstream_module.html

2、Nginx四层负载均衡配置

stream {upstream tcp_power {server 192.168.194.1:6000 weight=5;server 192.168.194.1:6001 backup;server 192.168.194.1:6001 max_fails=3 fail_timeout=30sserver 192.168.194.1:6001 down;}server {listen       12345;proxy_pass tcp_power;}
}hash $remote_addr consistent;

3、SocketTool工具

TCP/UDP Socket调试工具提供了TCP Server,TCP Client,UDP Server,UDP Client,UDP Group 五种Socket调试方案,方便我们发送和接收tcp连接数据;

4、TCP&UDPDebug工具

这是一款用于调试socket网络编程的小工具,可以作为客户端向某个地址发起连接并传送数据,也可以作为服务器端接收客户端的连接并响应数据;

二、Nginx实现限流

  • (1)ngx_http_limit_req_module模块
    -(2)ngx_http_limit_conn_module 模块
    Nginx中使用这两个模块来限制访问的频率,在nginx.conf配置文件中进行配置即可;
    文档http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s;
limit_req_zone $server_name zone=perserver:10m rate=2r/s;

这两个命令的语法结构:
limit_req_zone key zone rate
key: 定义需要限流的对象。
zone: 定义共享内存区来存储访问信息。
rate: 用于设置最大访问速率;

示例:

http {limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s;limit_req_zone $server_name zone=perserver:10m rate=2r/s;
}server {
location / {root htmllimit_req zone=perip burst=100 nodelay;limit_req zone=perserver burst=2;
}
}

上面binary_remote_addr就是key,表示基于客户端ip(remote_addr)进行限流,binary_表示压缩内存占用量;
zone定义了大小为10M的内存区,用于存储IP地址访问信息;
rate设置IP访问频率,rate=5r/s表示每秒只能处理每个IP地址的5个请求,Nginx限流是按照毫秒级为单位的,也就是说1秒处理5个请求会变成每200ms只处理一个请求,如果200ms内已经处理完1个请求,但是还是有新的请求到达,这时候Nginx就会拒绝处理该请求;
上面的配置一定程度可以限制访问频率,但是也存在着一个问题:如果突发流量超出请求被拒绝处理,无法处理活动时候的突发流量;
Nginx提供burst参数结合nodelay参数可以解决流量突发的问题,可以设置能处理的超过设置的请求数外能额外处理的请求数;
可以将之前的例子添加burst及nodelay参数:

http {limit_req_zone $binary_remote_addr zone=myLimit:10m rate=3r/s;
}
server {
location / {limit_req zone=myLimit burst=5 nodelay;}
}

limit_req指令中添加了burst=5 nodelay两个参数;
burst=5表示预先在内存中预留了5个请求的位置;
如果没有添加nodelay参数,此时有5个突发请求就会按照200ms去依次处理请求,也就是1s内把5个请求全部处理完毕,如果1s内有新的请求到达就不会立即进行处理;
如果添加了nodelay参数则表示要立即处理这5个突发请求;

limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
server {...limit_conn perip 10;
limit_conn perserver 100;
limit_conn_status 506;
}
error_page   506  /506.html;

三、Nginx实现防盗链

防盗链是什么意思?就是本站内的资源比如图片、CSS、JS、视频、文档等只能本站可以访问,其他网站不能访问;

location ~ .*\.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv)$ {valid_referers none blocked www.web.com *.power.com;if ($invalid_referer) {return 403;}
}location /img/ {root /data/img/;valid_referers none blocked www.web.com *.power.com;if ($invalid_referer) {#return 403;}
}

none表示空的来路,也就是直接访问,比如直接在浏览器打开一个图片;
blocked 表示 “Referer”字段出现在请求头中,但其值已被防火墙或代理服务器删除;

四、Nginx流量镜像

流量镜像(流量拷贝,流量复制,请求复制)
原来网易公司开源了一个TcpCopy https://www.oschina.net/p/tcpcopy;
Nginx提供的流量镜像功能能将生产环境的流量拷贝到预生产环境或测试环境,进行真实的流量测试,可以验证功能是否正常,以及服务的性能和稳定性;
由于是用真实有效的流量请求去验证,所以不用造测试数据,不影响线上正常访问,也可以用来排查线上问题;
Nginx提供了ngx_http_mirror_module模块实现流量镜像,从1.13.4版本开始提供;
文档:http://nginx.org/en/docs/http/ngx_http_mirror_module.html

location / {mirror /docs;root html;index index.html index.htm;
}location = /docs {internal;proxy_pass http://abc;
}

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

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

相关文章

Silane-PEG-Alkyne,硅烷-聚乙二醇-炔基用于修饰蛋白类

An English name:Silane-PEG-Alkyne Chinese name:硅烷-聚乙二醇-炔基 Item no:X-GF-0314-10k CAS:N/A Formula:N/A MW:Silane-PEG-Alkyne5000、Silane-PEG-Alkyne3400、Silane-PEG-Alkyne2000、硅烷-…

【附源码】计算机毕业设计SSM美食菜谱网站

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

(附源码)计算机毕业设计SSM基于JAVA线上订餐系统

(附源码)计算机毕业设计SSM基于JAVA线上订餐系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术…

【Vue Router】

资料 官网:https://v3.router.vuejs.org/zh/guide/ 尚硅谷视频:https://www.bilibili.com/video/BV1Zy4y1K7SH?p118 基本使用 安装: 这里安装vue3.x vue 2.x 版本对应 vue-router 3.xvue 3.x 版本对应 vue-router 4.x其他以此类推 npm…

【数据结构】------ 堆

目录 堆的概念及结构 堆的实现 堆向上调整算法 堆向下调整算法 堆的创建 堆的初始化和销毁 堆的插入 堆的删除 获取堆顶的数据 获取堆的数据个数 堆的判空 TopK问题(在N个数找出最大(小)的前K个) 堆排序 堆的概念及…

自学Python第二十七天- 简单部署生产环境,docker 的使用

自学Python第二十七天- 部署极简生产环境Windows 环境部署创建绿色 python 环境Linux 环境部署创建 Linux 环境使用Hyper-V使用 VMware 部署使用 docker 部署docker 原理安装 docker使用 linux 系统使用包管理工具使用 docker 仓库使用源代码安装使用 windows 系统开启 docker …

寻路算法-从bfs到Astart

一、简单BFS算法 bfs即广度优先搜索,最基础的寻路算法 即向出发点向四周无目的扩散,知道到达终点或者无法扩散为止 # coding: utf-8import random import bisectclass Solution(object):def __init__(self, n, m, bad):self.map [[0, 0, 0, 0, 0, 0, …

1.4. PUBLIC KEYS AS IDENTITIES公钥及身份 1.5. TWO SIMPLE CRYPTOCURRENCIES两种简单加密货币

《BITCOIN AND CRYPTOCURRENCY TECHNOLOGIES》Chapter 1系列 1.4. PUBLIC KEYS AS IDENTITIES 公钥作为身份 从一个签名方案中提取一个公钥将之视为一个身份。 公钥 public key 可以代表私钥 private key 的公众身份,而 private key 则是此人身份真实的内涵。 随时…

Linux服务搭建 -- NTP服务

什么是NTP? NTP全名“Network TimeProtocol”,即网络时间协议,是由RFC 1305定义的时间同步协议,用来在分布式时间服务器和客户端之间进行时间同步。 NTP基于UDP报文进行传输,使用的UDP端口号为123。使用NTP的目的是对网…

QFramework v1.0 使用指南 工具篇:03. CodeGenKit 脚本生成

在这一篇,我们学习几乎每个项目都要用到并且从中受益的功能:自动生成脚本并绑定,简称脚本生成。 基本使用 我们先在场景中,随便创建一些有父子结构的 GameObject,如下所示: 接着给 Player 挂上 ViewContr…

Spring 更简单的读取和存储对象

在 Spring 中想要更简单的存储和读取对象的核心是使用注解. 1.存储 Bean 对象 1.1 前置⼯作:配置扫描路径(重要) 注意:想要将对象成功的存储到 Spring 中,我们需要配置⼀下存储对象的扫描包路径,只有被配…

基于hadoop平台hive数据库处理电影数据

目录 1 开发背景 3 1.1开发背景与意义 4 1.2 开发环境与工具 4 2 可行性分析 7 2.1 可行性分析 8 2.2 需求可行性 8 2.3 技术可行性 8 2.4 操作可行性 8 2.5经济可行性 9 3 系统总体设计 10 3.1 总体设计方案 10 3.2 基础数据准备 10 3.3 环境准备 13 3.4 软件准备 13 4 系统详…

【文件操作详解】—— 一篇文章带你学会C语言的文件操作

文章目录1. 为什么要使用文件2. 什么是文件2.1 程序文件2.2 数据文件2.3 文件名3. 文件的打开和关闭3.1 文件指针3.2 如何打开和关闭文件3.2.1. 打开文件:fopen3.2.2 关闭文件:fclose3.2.3 补充4. 文件的顺序读写4.1 fputc4.2 fgetc4.3 fputs4.4 fgets4.…

(附源码)计算机毕业设计SSM基于Java网上玩具商店

(附源码)计算机毕业设计SSM基于Java网上玩具商店 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术…

c语言打力扣第89场双周赛第一题和315场周赛第一、二题(c语言)

目录 一、6208.有效时间的数目(简单题) (c语言暴力解法) 二、6204.于对应负数同时存在的最大正整数(简单题)(c语言求解) 三、6205.反转之后不同正数的数目(中等题)(c语言求解) 总结 一、6208.有效时间的数目(简单题) (c语言暴力解法) 89场双周赛第一题: int co…

C++ 构造函数详解

目录 0. 什么是构造函数 1. 默认构造函数 2. 一般构造函数 3. 拷贝构造函数 4. 转换构造函数 5. 移动构造函数 0. 什么是构造函数 在定义类的成员函数的时候,一般的成员函数与普通的全局函数没有太大的区别,在定义函数的时候都需要说明要返回的类…

JVM(Java Virtual Machine)内存模型

什么是JVM JVM(Java Virtual Machine)叫做Java虚拟机。jvm是Java运行基础。java虚拟机时一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。Java被设计成应用程序可以运行在任何平台(平台无关性&…

Android移动应用开发之Viewpage2+fragment实现微信滑动界面的效果

文章目录布局viewpager2fragmentadapter实现的效果如下&#xff1a;滑动界面能够实现界面的跳转。点击下面按钮同样实现界面的跳转。布局 最下面的导航栏&#xff0c;单独写了个布局文件&#xff1a; <?xml version"1.0" encoding"utf-8"?> <…

【数据结构与算法】小白入门

前言 小白决定补一补计算机基础知识&#xff0c;欢迎路过的大佬各抒己见&#xff01; 正文 数据结构与算法 数据结构是算法的基础&#xff0c;算法在特定的数据结构上才能发挥作用&#xff1b;数据存储结构会影响算法效率&#xff1b; 数据结构说明数据的组织方式&#…

睡一觉起来感觉穿越了一样,与软件测试的机缘巧遇

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 小伍自述&#xff1…