首页 > 系统相关 >Nginx使用篇:实现负载均衡、限流与动静分离

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

时间:2024-09-16 09:52:12浏览次数:9  
标签:负载 请求 server Nginx 限流 com example


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

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

         |  分类:Nginx学习系列教程


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

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 znotallow=traffic_control:10m rate=10r/s;


    server {

        listen 80;


        location / {

            limit_req znotallow=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 应用的整体性能。


标签:负载,请求,server,Nginx,限流,com,example
From: https://blog.51cto.com/kaigejava/12030159

相关文章

  • Nginx使用篇:实现负载均衡、限流与动静分离
     Nginx实用篇:实现负载均衡、限流与动静分离 | 原创作者/编辑:凯哥Java                    | 分类:Nginx学习系列教程 nginx的logoNginx作为一款高性能的HTTP服务器及反向代理解决方案,在互联网架构中扮演着至关重要的角色。......
  • Spring Boot 执行流程已经 负载均衡执行流程图
    这个流程图展示了SpringBoot如何通过多层次的并发处理(多实例、线程池、数据库连接池等)来实现高并发访问。每一层都在努力最大化并发处理能力,同时保持资源的有效利用。关键点:负载均衡实现了请求的初步分发线程池管理并发请求数据库连接池优化数据库访问多个SpringBoot......
  • 记一次nginx布署spring cloud项目后,jar包运行正常,但访问静态资源报404的问题。
    1、我们知道springcloud,是通过注册中心来注册所有的应用,这里面也包括网关gateway的注册:2、这里面我们运行了consoleapplication应用,这样里面就有一个Instance。3、测试静态资源的访问:4、consoleapplication结构:5、访问单个模块里的资源是正常的,但是上了服务器,nginx布......
  • windows server2012 配制nginx安装为服务的时候,直接跳要安装.net框架,用自动的安装,直接
    1、上一个已成功在安装过程中的图:2、之前安装过程中错误的图:3、离线安装解决:下载.netframework3.5,然后解压后,选择指定备用源路径,然后选择.net安装包所在目录:只要指定上面全路径就可以,要看到先多目录。4、再次安装nginx服务成功:这样服务就安装成功了。参考:Win......
  • nginx 安装服务后,启动报:An attempt was made to access a socket in a way forbidden
    1、nginx1.18.0安装服务成功后,启动服务的时候,一闪直接报错:2、查看Nginx的日志error.log发现启动一次报一条错,并且都是一样的:2024/09/1414:42:18[emerg]6852#6280:bind()to0.0.0.0:80failed(10013:Anattemptwasmadetoaccessasocketinawayforbiddenbyit......
  • 9、【实战中提升自己】华为 华三中小型企业网络架构搭建 【无线架构之低速率限制与负
     1 拓扑与说明         某公司的网络架构,这样的架构在目前的网络中是在常见的,假设您接收一个这样的网络,应该如何部署,该实战系列,就是一步一步讲解,如何规划、设计、部署这样一个环境,这里会针对不同的情况给出不同的讲解,比如拓扑中有2个ISP,假设客户需求是,想实现主备的......
  • 前端项目通过 Nginx 发布至 Linux,并通过 rewrite 配置访问后端接口
    〇、前言本文通过将arco框架的前端项目,部署至CentOS7,并访问同服务器的WebAPI接口,来简单演示一下,如何将前端项目发布至Linux系统。关于ASP.NETWebAPI发布至Linux的步骤,可以参考博主过往文章:https://www.cnblogs.com/hnzhengfy/p/18384107/webapi_centos。一、简......
  • Docker部署tenine实现后端应用的高可用与负载均衡
    采用Docker方式的Tengine和keepalived组合模式可以实现小应用场景的高可用负载均衡需求目录网络架构一、环境准备二、软件安装1.下载Tenine镜像2.下载Keepalived镜像3.制作SpringBoot镜像三、软件配置1.创建应用容器2.代理访问应用3.创建Keepalived4.测试高可用网络架......
  • 负载均衡:从理论到实践 ---day04
    负载均衡负载均衡1.什么是负载均衡2.负载均衡的分类硬件负载均衡软件负载均衡选择3.引入负载均衡的好处第一个Ribbon实例步骤1:步骤2:步骤3:步骤4:问题1.负载均衡的主要目标是什么?2.负载均衡器的作用是什么?3.常用的负载均衡算法有哪些?请解释其中一两种。4.什么是会话......
  • SpringCloud-04 OpenFeign服务调用与负载均衡
    OpenFeign是一个声明式、模板化的HTTP客户端,它简化了在Java应用程序中调用RESTfulAPI的过程。OpenFeign是Netflix开发的一个开源项目,它构建在Feign的基础上,为开发者提供了更加简单、灵活的方式来实现HTTP请求。OpenFeign的特点包括:前面在使用SpringCloudLoadBalancer+Res......