interview
backend-classic
如何用Nginx做限流,有几种限流算法,分别如何实现?

后端经典面试题合集, 如何用 Nginx 做限流,有几种限流算法,分别如何实现?

后端经典面试题合集, 如何用 Nginx 做限流,有几种限流算法,分别如何实现?

QA

Step 1

Q:: 如何用 Nginx 做限流,有几种限流算法,分别如何实现?

A:: Nginx 限流主要通过 ngx_http_limit_req_module 和 ngx_http_limit_conn_module 实现。常见的限流算法有漏桶算法(Leaky Bucket)、令牌桶算法(Token Bucket)和固定窗口算法(Fixed Window)。

1. 漏桶算法:通过设定一个固定的出水率,将请求排队处理,超过处理能力的请求会被丢弃或延迟。

2. 令牌桶算法:系统以固定速率生成令牌,请求需要消耗令牌才能被处理,超过速率的请求被丢弃或延迟。

3. 固定窗口算法:在固定的时间窗口内限制请求数量,超过的请求直接拒绝。

Step 2

Q:: Nginx 限流的配置方式有哪些?

A:: Nginx 限流可以通过配置 limit_req_zone 和 limit_req 来实现。limit_req_zone 用于定义限流的共享内存区域,limit_req 用于设定具体的限流规则。常见配置包括 rate (速率限制) 和 burst (突发流量限制)。示例配置:

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

Step 3

Q:: 限流算法在生产环境中的应用场景有哪些?

A:: 限流算法主要应用于以下场景:

1. 防止恶意请求和爬虫攻击,保护服务器资源。 2. 避免突发流量对系统造成冲击,保证服务的稳定性。 3. 在 API 网关中对第三方调用方的请求进行限流,防止单个用户影响整体服务质量。

用途

面试限流相关内容是为了评估候选人对高并发和系统稳定性的理解和处理能力。实际生产环境中,限流常用于保护服务器不被突发流量或恶意攻击耗尽资源,同时也可以用来实现对不同用户群体的服务质量保证。在高流量场景下,如大型网站的登录请求、秒杀活动等,限流是确保服务可用性的重要手段。\n

相关问题

🦆
什么是 Nginx 的负载均衡?

Nginx 的负载均衡是指通过 Nginx 将请求分发到多台服务器上,从而实现负载的均衡分配。常用的负载均衡策略包括轮询 (Round Robin)、最少连接 (Least Connections) 和 IP 哈希 (IP Hash)

配置示例:

 
upstream backend {
    server backend1.example.com;
    server backend2.example.com;
}
 
server {
    location / {
        proxy_pass http://backend;
    }
}
 
🦆
如何在 Nginx 中实现请求缓存?

Nginx 可以通过配置 proxy_cache 实现请求缓存,缓存常见于静态文件和 API 响应的加速。示例配置:

 
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=1g;
 
server {
    location / {
        proxy_cache my_cache;
        proxy_pass http://backend;
    }
}
 
🦆
Nginx 如何实现 SSL 终止?

Nginx 可以通过配置 SSL 模块实现 HTTPS 请求的解密和终止,从而将解密后的请求转发到后端服务器。示例配置:

 
server {
    listen 443 ssl;
    server_name example.com;
 
    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;
 
    location / {
        proxy_pass http://backend;
    }
}