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

news/2024/11/16 7:27:48/文章来源:https://www.cnblogs.com/kaigejava/p/18415977

 

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

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

         |  分类:Nginx学习系列教程

 

image.png

nginx的logo

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.hqwc.cn/news/797969.html

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

相关文章

[ACTF2020 新生赛]Upload

启动靶机,发现有前端验证先绕过前端验证,在burp中尝试发现验证在文件名后缀,且会重命名文件名 发现.ini能上传但是会被重命名,既然不像前端显示只有三种格式能上传,这里我们寻找能绕过的后缀尝试发现phtml能上传成功 //PHTML 扩展名是 PHP 的一个模块,它允许在 HTML 文件…

上海登陆最强台风 台风路径追踪 All In One

上海登陆最强台风 & 台风路径追踪 All In One 上海最强台风路径追踪 中央气象台、市气象服务中心介绍,今年第13号台风“贝碧嘉”(强台风级)的中心已于今天(2024年09月16日)7点30分前后在上海浦东临港新城登陆,登陆时中心附近最大风力14级(42米/秒),中心最低气压为…

再vue中使用Vuetify 创建app项目

vue:2 Vuetify :2与vue创建普通项目相同:https://www.cnblogs.com/yansans/p/18342267vscode打开项目,在项目终端中运行vue add vuetify@2之后会出现,选择默认即可(回车) 几个选项的解释: 1. Vuetify 2 - Configure Vue CLI (advanced)解释:这是一个高级选项,允许你对…

广东产业转移工业园

广东产业转移工业园

南沙C++信奥老师解一本通题 1228:书架

​【题目描述】John最近买了一个书架用来存放奶牛养殖书籍,但书架很快被存满了,只剩最顶层有空余。 John共有NN头奶牛(1≤N≤20,000),每头奶牛有自己的高度Hi(1≤Hi≤10,000),N头奶牛的总高度为S。书架高度为B(1≤B≤S<2,000,000,007)。 为了到达书架顶层,奶牛可以踩着…

基于Java+Springboot+Vue开发的医院门诊预约挂号系统

项目简介该项目是基于Java+Springboot+Vue开发的医院门诊预约挂号系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的门诊预约挂号管理系统项目,大学生可以在…

基于Java+Springboot+Vue开发的家具管理系统

项目简介该项目是基于Java+Springboot+Vue开发的家具管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的家具管理系统项目,大学生可以在实践中学习和提升…

VirtualBox 7.1.0 发布下载 - 开源跨平台虚拟化软件

VirtualBox 7.1.0 发布下载 - 开源跨平台虚拟化软件VirtualBox 7.1.0 发布下载 - 开源跨平台虚拟化软件 VirtualBox 7.1.0 (macOS, Linux, Windows) - 开源跨平台虚拟化软件 Oracle VM VirtualBox 7 请访问原文链接:https://sysin.org/blog/virtualbox-7/,查看最新版。原创作…

Kali Linux 2024.3 发布下载 - 领先的渗透测试发行版

Kali Linux 2024.3 发布下载 - 领先的渗透测试发行版Kali Linux 2024.3 发布 (Multiple transitions) - 领先的渗透测试发行版 The most advanced Penetration Testing Distribution 请访问原文链接:https://sysin.org/blog/kali-linux/,查看最新版。原创作品,转载请保留出处…

南沙C++信奥老师解一本通题:2110:【例5.1】素数环

​ 【题目描述】输入正整数n,把整数1,2,…,n 组成一个环,使得相邻两个整数之和均为素数。【输入】输入正整数n。【输出】输出任意一个满足条件的环。【输入样例】 6 【输出样例】 4 3 2 5 6 1 【提示】数据满足: 4≤n≤30#include <bits/stdc++.h> using namespace st…

Cisco Jabber 15.0 发布下载 - 面向企业的多合一通信工具

Cisco Jabber 15.0 发布下载 - 面向企业的多合一通信工具Cisco Jabber 15.0 (Andriod, iOS, macOS, Windows) - 面向企业的多合一通信工具 即时消息、语音和视频通话、语音邮件、桌面共享、会议和在线状态 请访问原文链接:https://sysin.org/blog/cisco-jabber-15/,查看最新版…

9.15 比赛总结

突然想起来自己把比赛总结的好习惯忘掉了,所以现在重新拾起,故名曰《朝花夕拾》。T1 出了个大阴间题 看数据范围明显状压。很明显,\(a,b\) 分成两部分处理。 \(f_{s,i}\) 表示状态为 \(s\),\(a=i\) 时的所有情况之和,还要计算 \(num_{s,i}\) 表示此时情况数。 \(b\) 直接递…