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

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

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

相关文章

【数据结构与算法 | 灵神题单 | 二叉搜索树篇】力扣653

1. 力扣653:两数之和IV - 输入二叉搜索树 1.1 题目: 给定一个二叉搜索树 root 和一个目标结果 k,如果二叉搜索树中存在两个元素且它们的和等于给定的目标结果,则返回 true。 示例 1: 输入: root [5,3,6,2,4,null,7…

大数据处理技术:HBase的安装与基本操作

目录 1 实验名称 2 实验目的 3 实验内容 4 实验原理 5 实验过程或源代码 5.1 Hbase数据库的安装 5.2 创建表 5.3 添加数据、删除数据、删除表 5.4 使用Java操作HBase 6 实验结果 6.1 Hbase数据库的安装 6.2 创建表 6.3 添加数据、删除数据、删除表 6.4 使用Java操…

C++:类和对象全解

C:类和对象全解 一、类的定义和初始化(一)类的定义1、类的成员变量(1)成员变量(2)成员函数 2、实例化对象(1)采用普通构造函数(2)采用初始化列表 …

CAD的案例

在这个案例我会一步步教如何快速实现 比如我们要复刻这个图形 首先先画直线 输入L,然后空格,输入尺寸70,按ESC退出 到这一步画斜线,很简单就是直线旋转30的角度 直线教学: 先从右边拖到左边,选中这条直线…

【ShuQiHere】 探索数据挖掘的世界:从概念到应用

🌐 【ShuQiHere】 数据挖掘(Data Mining, DM) 是一种从大型数据集中提取有用信息的技术,无论是在商业分析、金融预测,还是医学研究中,数据挖掘都扮演着至关重要的角色。本文将带您深入了解数据挖掘的核心概…

中小企业体系技术抽象沉淀-异地灾备篇

IT团队内部使用工具 系列文章:https://blog.csdn.net/caicongyang/article/details/136857045 DDL DML管控 https://github.com/hhyo/Archery/ flyway 文档编写 wiki 技术对外输出文档推荐gitbook 同城双活数据同步方案 总览: vivo 系列文章&#x…

十三 系统架构设计(考点篇)

1 软件架构的概念 一个程序和计算系统软件体系结构是指系统的一个或者多个结构。结构中包括软件的构件,构件 的外部可见属性以及它们之间的相互关系。 体系结构并非可运行软件。确切地说,它是一种表达,使软件工程师能够: (1)分…

洪涝洪水滑坡灾害数据集 灾害 2300张 带标注 voc yolo

洪涝洪水滑坡灾害数据集 灾害 2300张 带标注 voc yolo 洪涝洪水滑坡灾害数据集 数据集描述 该数据集是一个专门用于检测和识别洪涝、洪水和滑坡等自然灾害的数据集,旨在帮助研究人员和开发者训练和评估基于深度学习的目标检测模型。数据集涵盖了两种常见的自然灾害…

8-----手机机型维修工具助手 功能较全 涵盖解锁 刷机 修复等选项 维修推荐

上图是一款功能较全的维修加密狗。目前可以无限制 任何人使用。看图片可以了解其中涵盖刷机 解锁 修复分区 查看短接图 安装驱动 修复基带等等选项。而且其中有针对各个机型型号的对应功能操作。以及一些rec5.0相关的操作选项。 通过此博文了解 ★★★★★此工具涵盖的一些…

【Java】JVM基本组成

一、JDK、JRE、JVM JDK:全称 “Java Development Kit” Java 开发工具包,提供 javac编译器、jheap、jconsole 等监控工具; JRE:全称 “Java Runtime Environment” Java 运行环境,提供 class Library 核心类库JVM; …

项目集成sharding-jdbc

目录 项目集成sharding-jdbc 1.业务分析 2.数据库构建 3.分库分表策略 项目配置默认数据源 一:导入sharding-jdbc依赖 二:在application文件中编写配置 三:注释掉主配置文件中配置的数据源 注意:这里添加了spring.main.allow…

C++之初识STL(概念)

STL(标准模板库) STL广义分类为:容器,算法,迭代器 * **容器**和**算法**之间通过**迭代器**进行无缝连接 意义:C的**面向对象**和**泛型编程**思想,目的就是**复用性的提升** STL六大组件 1. 容…

ubuntu中通过源码安装pointnet2_ops_lib

注:本帖所用环境为:ubuntu 24.04、 cuda 12.04 文章目录 1. 克隆 PointNet 源码库2. 安装依赖3. 编译 pointnet2_ops_lib4. 测试安装 1. 克隆 PointNet 源码库 首先,克隆 PointNet 的 GitHub 仓库: git clone https://github.co…

JavaEE: 深入探索TCP网络编程的奇妙世界(六)

文章目录 TCP核心机制TCP核心机制九: 面向字节流TCP核心机制十: 异常处理 小小的补充(URG 和 PSH)~TCP小结TCP/UDP 对比用UDP实现可靠传输(经典面试题) 结尾 TCP核心机制 上一篇文章JavaEE: 深入探索TCP网络编程的奇妙世界(五) 书接上文~ TCP核心机制九: 面向字节流 TCP是面…

Fyne ( go跨平台GUI )中文文档-容器和布局 (四)

本文档注意参考官网(developer.fyne.io/) 编写, 只保留基本用法 go代码展示为Go 1.16 及更高版本, ide为goland2021.2 这是一个系列文章: Fyne ( go跨平台GUI )中文文档-入门(一)-CSDN博客 Fyne ( go跨平台GUI )中文文档-Fyne总览(二)-CSDN博客 Fyne ( go跨平台GUI…

基于Ambari搭建hadoop生态圈+Centos7安装教程V2.0优化版(本篇博客写的较为详细,可能比较多,请耐心看)

当我们学习搭建hadoop的时候,未免也会遇见很多繁琐的事情,比如很多错误,需要解决。在以后公司,也不可能让你一个一个搭建hadoop,成千上万的电脑,你再一个个搭建,一个个报错,而且每台…

初始main方法,标识符和关键字

1. 初识Java的main方法 1.1 main方法示例 public class HelloWorld{public static void main(String[] args){System.out.println("Hello,world");} }图解: 通过上述代码,我们可以看到一个完整的Java程序的结构,Java程序的结构…

springbootKPL比赛网上售票系统

基于springbootvue实现的KPL比赛网上售票系统 (源码L文ppt)4-068 4.2 系统结构设计 架构图是系统的体系结构,体系结构是体系结构体系的重要组成部分。KPL比赛网上售票系统的总体结构设计如图4-2所示。 图4-2 系统总体架构图 4.3数据…

python全栈学习记录(十七)logging、json与pickle、time与datatime、random

logging、json与pickle、time与datatime、random 文章目录 logging、json与pickle、time与datatime、random一、logging二.json与pickle三.time与datatime四.random 一、logging logging模块用来记录日志信息。 import logging # 进行基本的日志配置 logging.basicConfig( fi…

全面详尽的 PHP 环境搭建教程

目录 目录 PHP 环境搭建概述 在 Windows 上搭建 PHP 环境 使用集成环境 XAMPP 安装步骤 配置和测试 常用配置 手动安装 Apache、PHP 和 MySQL 安装 Apache 安装 PHP 安装 MySQL 配置 PHP 连接 MySQL 在 Linux 上搭建 PHP 环境 使用 LAMP 方案 安装 Apache 安装 …