Nginx实用篇:实现负载均衡、限流与动静分离

news2024/11/15 11:36:13

Nginx实用篇:实现负载均衡、限流与动静分离

 |  原创作者/编辑:凯哥Java                            

         |  分类:Nginx学习系列教程

Nginx 作为一款高性能的 HTTP 服务器及反向代理解决方案,在互联网架构中扮演着至关重要的角色。它不仅支持负载均衡、流量控制等功能,还能够有效地实现动静分离,以此来增强系统的稳定性和响应速度。本文将详细介绍这些功能的应用场景及具体配置方法。

一、负载均衡

Nginx 通过反向代理机制实现负载均衡,将前端用户的请求智能地分散到多个后端服务器上,从而提升整体的服务能力和系统的高可用性。

配置示例:

在 http 区块内定义 upstream 服务器池,指定多个后端服务器地址:

http {

    upstream backend_servers {

        server backend1.example.com;

        server backend2.example.com;

        server backend3.example.com;

    }

    server {

        listen 80;

        location / {

            proxy_pass http://backend_servers;

        }

    }

}

负载均衡算法:

轮询(Round Robin):默认情况下,请求会按照顺序轮流发送到各个服务器。

权重(Weight):允许为每个服务器分配不同的权重,权重越高,接收请求的概率越大。

IP 哈希(IP Hash):根据客户端 IP 地址进行哈希运算,使得来自同一客户端的请求始终指向相同的后端服务器。

最少连接(Least Connections):选择当前连接数最少的服务器来处理新的请求。

示例配置如下:

upstream backend_servers {

    server backend1.example.com weight=3;

    server backend2.example.com;

    server backend3.example.com;

}

upstream backend_servers {

    ip_hash;

    server backend1.example.com;

    server backend2.example.com;

    server backend3.example.com;

}

upstream backend_servers {

    least_conn;

    server backend1.example.com;

    server backend2.example.com;

    server backend3.example.com;

}

二、流量控制(限流)

Nginx 提供了强大的限流功能,通过 ngx_http_limit_req_module 模块来限制单位时间内客户端的请求数量,防止服务器因过多请求而过载。

配置示例:

首先在 http 区块内声明一个限流区域,并指定其共享内存大小及最大请求速率:

http {

    limit_req_zone $binary_remote_addr zone=traffic_control:10m rate=10r/s;

    server {

        listen 80;

        location / {

            limit_req zone=traffic_control burst=20 nodelay;

            proxy_pass http://backend_servers;

        }

    }

}

参数解析:

limit_req_zone定义了一个名为 traffic_control 的限流区域,共享内存大小为 10MB,最大请求速率为每秒 10 个请求。

limit_req 应用了上述区域,burst=20 允许短时间内的请求爆发,nodelay 表示超出限速的请求立即返回错误。

三、动静分离

动静分离是通过区分动态与静态请求,分别处理以达到提升网站性能的目的。对于静态资源(如图片、样式表、脚本文件),Nginx 可以直接处理;而对于动态请求,则由 Nginx 代理到后端应用服务器进行处理。

配置示例:

server {

    listen 80;

    location / {

        proxy_pass http://backend_servers;

    }

    location ~* \.(jpg|jpeg|png|gif|css|js|ico|html)$ {

        root /var/www/static;

        expires 30d;

    }

}

参数解析:

location /  匹配所有路径,将请求代理给后端服务器。

location ~* \.(jpg|jpeg|png|gif|css|js|ico|html)$ 匹配特定类型的静态文件,并直接由 Nginx 返回。root指定静态文件存放的目录,expires 设置客户端缓存时间为 30 天。

结语

Nginx 以其灵活多变的配置方式和高效的执行能力,成为现代 Web 架构不可或缺的一部分。无论是通过反向代理实现的负载均衡,还是限流机制以及动静分离策略,都能极大地改善服务质量和用户体验。熟练掌握这些配置技巧,可以帮助我们更好地发挥 Nginx 的潜力,进一步提升 Web 应用的整体性能。

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

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

相关文章

可视化深度网络的强大工具:Grad-CAM介绍与使用步骤

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 👍感谢小伙伴们点赞、关注! 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发…

第一次安装Pytorch

1、新版本的Anaconda内置的python版本是3.12, 目前 Windows 上的 PyTorch 仅支持 Python 3.8-3.11;不支持 Python 2.x。 1、创建运行环境 在不创建虚拟环境的情况下,不建议使用最新的Python和Anaconda。 在几次失败后,我使用的是Anaconda3-2…

单相可控整流电路(单相半波整流电路、单相桥式全控整流电路)

目录 1. 单相半波整流电路 2. 单相桥式全控整流电路 单相可控整流电路是利用可控硅(晶闸管)将交流电转换为直流电的电路,主要有两种常见类型:单相半波整流电路和单相桥式全控整流电路。 1. 单相半波整流电路 单相半波整流电路是…

python实现多个pdf文件合并

打印发票时,需要将pdf合并成一个,单页两张打印。网上一些pdf合并逐渐收费,这玩意儿都能收费?自己写一个脚本使用。 实现代码: 输入pdf文件夹路径data_dir,统计目录下的“合并后的PDF”文件夹下,…

十六,Spring Boot 整合 Druid 以及使用 Druid 监控功能

十六,Spring Boot 整合 Druid 以及使用 Druid 监控功能 文章目录 十六,Spring Boot 整合 Druid 以及使用 Druid 监控功能1. Druid 的基本介绍2. 准备工作:3. Druid 监控功能3.1 Druid 监控功能 —— Web 关联监控3.2 Druid 监控功能 —— SQL…

数组学习内容

动态初始化 只给长度,数据类型【】 数组名new 数据类型【数组长度】 内存图

MySQL篇(数值函数/)(持续更新迭代)

目录 常见函数一:数值函数 一、常见数值函数 1. 基本函数 2. 角度与弧度互换函数 3. 三角函数 4. 指数与对数 5. 进制间的转换 常见函数二:日期函数 一、常见日期函数 二、SQL演示 1. curdate:当前日期 2. curtime:当前…

ThreadX源码:Cortex-A7的tx_thread_context_save.S(线程上下文保存)汇编代码分析

0 参考资料 Cortex M3权威指南(中文).pdf(可以参考ARM指令集用法) 1 前言 tx_thread_context_save.S是用来实现Cortex-A7下线程上下文保存的函数所在汇编文件。 2 源码分析 2.1 概述 _tx_thread_context_save函数用于在线程被中断打断后保存上下文&a…

「Next.js中文文档」网站发布

大家好,我是程普(weijunext),我联合“阿伟dev”搭建了一个「Next.js 中文文档」网站👇 这个网站我们设计得很特别: 样式很特别 我们模仿 Next.js 官方网站样式,努力做到除了语言不同&#xff…

进程相关的系统调用

文章目录 进程进程相关的系统调用wait函数waitpid函数示例--使用wait fork函数创建子进程并使用宏验证子进程的退出状态信息示例--使用waitpid函数检测子进程是否进入暂停状态 exec族函数示例--exec族函数的使用 system函数示例--使用system函数执行外部指令 进程状态切换 进程…

Vue2电商平台项目 (三) Search模块、面包屑(页面自己跳自己)、排序、分页器!

文章目录 一、Search模块1、Search模块的api2、Vuex保存数据3、组件获取vuex数据并渲染(1)、分析请求数据的数据结构(2)、getters简化数据、渲染页面 4、Search模块根据不同的参数获取数据(1)、 派发actions的操作封装为函数(2)、设置带给服务器的参数(3)、Object.assign整理参…

第十一章 【后端】商品分类管理微服务(11.1)——创建父工程

第十一章 【后端】商品分类管理微服务 11.1 创建父工程 项目名称:EasyTradeManagerSystem:Easy 表示简单易用,Trade 表示交易,Manager 表示管理,System 表示系统,强调系统在商品交易管理方面的便捷性,简称 etms。 新建工程 yumi-etms yumi-etms 作为所有模块的父工程,…

基于java 的医院排号管理系统设计与实现

博主介绍:专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的可以…

1863. 找出所有子集的异或总和再求和

目录 一:题目: 二:代码: 三:结果: 一:题目: 一个数组的 异或总和 定义为数组中所有元素按位 XOR 的结果;如果数组为 空 ,则异或总和为 0 。 例如&#x…

C++--类的实例化

一、实例化的概念 用类类型在屋里内存中创建对象的过程,称为类实例化出对象 类是对对象进行一种抽象描述,是一个模型一样的东西,限定了类有哪些成员变量,这些成员变量只是声明,没有分配空间,用类实例化出…

【C++前后缀分解 动态规划】2100. 适合野炊的日子|1702

本文涉及知道点 C前后缀分解 C动态规划 LeetCode2100. 适合野炊的日子 你和朋友们准备去野炊。给你一个下标从 0 开始的整数数组 security ,其中 security[i] 是第 i 天的建议出行指数。日子从 0 开始编号。同时给你一个整数 time 。 如果第 i 天满足以下所有条件…

2024最新版MySQL详细学习教程

MySQL数据库提供了很多函数包括: 数学函数;字符串函数;日期和时间函数;条件判断函数;系统信息函数;加密函数;格式化函数; 一、数学函数 数学函数主要用于处理数字,包括…

基于paddleocr的批量图片缩放识别

说明 在进行ocr文字识别的时候,有时候我们需要使用批量测试的功能,但是有些图片会识别失败或者个别根本识别不出来,这时候我们可以通过对原图片进行缩放,提高图像的分辨率,然后再次识别,这样可以大大提高图…

Vue学习记录之一(介绍及脚手架的使用)

一、背景知识介绍 1、构建工具介绍 Vite, Webpack,Rollup, Parce 构建工具优点缺点Vite- 快速启动,秒级热更新,更快的构建速度,更好的开发体验;- 支持 Vue3 和 ES modules 的原生特性,轻松实现按需加载。- 对于单页…

项目实现:云备份②(文件操作、Json等工具类的实现)

云备份 前言文件操作实用工具类设计文件属性的获取文件的读写操作文件压缩与解压缩的实现文件目录操作 Json 实用工具类设计编译优化 前言 如果有老铁不知道当前项目实现的功能是什么的话,可以先移步这篇文章内容: 云备份项目的介绍 其中介绍了云备份项…