Nginx 限速三剑客基础使用

本贴最后更新于 449 天前,其中的信息可能已经时移世改

Nginx 限速三剑客基础使用

一、前言

  1. ngx_http_limit_req_module**:用于限制请求速率。**
  2. ngx_http_limit_conn_module**:用于限制并发连接数。**
  3. ngx_http_core_module**:Nginx 的核心模块,提供了一般的 HTTP 配置和请求处理。。**

二、limit_req_module

 http {
     # 配置限制请求速率
     limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
  
 server {
         listen 80;
         server_name example.com;
 
         # 配置请求速率限制
         location /api/ {
             limit_req zone=one burst=10;
             # 其他配置
         }
 }
 }

在上面的示例中:

  • limit_req_zone** 创建一个请求速率的为 10m 的内存区域该区域叫做 one,通过 $binary_remote_addr 获取每个客户端 IP,IP 地址的请求速率都会在这个区域内进行跟踪,每秒不得超过 5 次请求。**
  • limit_req** 指令用于在 /api/ 路径下限制请求速率。在此示例中,每秒最多允许 5 个请求,突发请求不超过 10 个。**
  • 如果超过了请求速率 Nginx 返回 429 响应。

三、http_limit_conn_module

 http {
     # 配置限制并发连接数
     limit_conn_zone $binary_remote_addr zone=addr:10m;
      server {
         listen 80;
         server_name example.com;
 
         # 配置并发连接数限制
         location / {
             limit_conn addr 10;
             # 其他配置
         }
         
         # 其他服务器块和配置
     }
     
     }
  • limit_conn_zone** 创建一个并发连接限制的为 10m 的内存区域该区域叫做 addr,通过 $binary_remote_addr 获取每个客户端 IP,IP 地址的请求速率都会在这个区域内进行跟踪。**
  • limit_conn** 指令用于在其他路径下限制并发连接数。在此示例中,每个客户端最多允许 10 个并发连接。**
  • **超出并发连接返回 503 响应。 **

四、http_core_module

 # 全局配置块
 user nginx;
 worker_processes auto;  # 自动选择工作进程数量
 error_log /var/log/nginx/error.log;
 
 events {
     worker_connections 1024;
 }
 
 http {
     # HTTP全局配置块
     include /etc/nginx/mime.types;
     default_type application/octet-stream;
     sendfile on;  # 启用sendfile
     tcp_nopush on;  # 启用TCP NOPUSH
     keepalive_timeout 65;
     
     # 服务器块,定义虚拟主机
     server {
         listen 80;  # 监听80端口
         server_name example.com www.example.com;
 
         location / {
             root /var/www/html;  # 静态文件的根目录
             index index.html;     # 默认索引文件
         }
 
         location /images/ {
             alias /var/www/images/;  # 使用别名来指定不同的目录
         }
         
         # 配置错误页面
         error_page 404 /404.html;
         error_page 500 502 503 504 /50x.html;
         
         location = /50x.html {
             root /usr/share/nginx/html;
         }
     }
     
     # 其他服务器块和配置
 }
 在上面的示例中:
 
 user 指令定义了 Nginx 进程的运行用户。
 worker_processes 指令自动选择工作进程数量。
 error_log 指令配置错误日志文件的位置。
 events 指令定义事件模块的全局配置,包括工作进程数量和最大连接数。
 http 指令块包含了 HTTP 配置的全局设置,如 MIME 类型、默认类型、文件传输等。
 server 指令块定义了一个虚拟主机,指定了监听端口和服务器名称。
 location 指令定义了不同 URL 路径的处理方式,包括静态文件的根目录和索引文件。
 alias 指令用于创建一个虚拟目录,将 URL 映射到文件系统的不同位置。
 error_page 指令配置了自定义错误页面,并将特定 HTTP 错误代码映射到相应的页面。
 这只是一个简单的示例,您可以根据您的需求和网站配置来调整 Nginx 的 http_core_module 部分。此示例用于提供静态内容,但 Nginx 也可以配置为反向代理、负载均衡、SSL 终端等多种用途。
 
 X
 nginx限速三剑客http_core_module 示例
 ChatGPT
 Nginx 的 "限速三剑客" 通常指的是 ngx_http_limit_req_module、ngx_http_limit_conn_module 和 ngx_http_core_module,但 http_core_module 通常不包括在其中,因为它是 Nginx 的核心模块,主要用于全局 HTTP 配置而不是请求速率限制。
 
 以下是一个简单的 Nginx 配置示例,演示如何在 http_core_module 中配置基本的全局 HTTP 设置:
 
 nginx
 Copy code
 # 全局配置块
 user nginx;  # 指定 Nginx 进程的运行用户
 worker_processes auto;  # 自动选择工作进程数量
 error_log /var/log/nginx/error.log;
 
 events {
     worker_connections 1024;  # 每个工作进程允许的最大连接数
 }
 
 http {
     # HTTP 全局配置块
     include /etc/nginx/mime.types;  # 包含 MIME 类型配置文件
     default_type application/octet-stream;  # 默认 MIME 类型
 
     sendfile on;  # 启用 sendfile,用于快速传输文件
     tcp_nopush on;  # 启用 TCP NOPUSH 以减少传输延迟
     keepalive_timeout 65;  # 客户端与服务器之间的持续连接超时时间
 
     # 服务器块,定义虚拟主机
     server {
         listen 80;  # 监听80端口
         server_name example.com www.example.com;  # 域名配置
 
         location / {
             root /var/www/html;  # 静态文件的根目录
             index index.html;     # 默认索引文件
         }
 
         # 配置错误页面
         error_page 404 /404.html;
         error_page 500 502 503 504 /50x.html;
 
         location = /50x.html {
             root /usr/share/nginx/html;
         }
     }
 
     # 其他服务器块和配置
 }
 

在上面的示例中:

  • user** 指令定义了 Nginx 进程的运行用户。**
  • worker_processes** 指令自动选择工作进程数量。**
  • error_log** 指令配置错误日志文件的位置。**
  • events** 指令定义事件模块的全局配置,包括工作进程数量和最大连接数。**
  • http** 指令块包含了 HTTP 配置的全局设置,如 MIME 类型、默认类型、文件传输等。**
  • server** 指令块定义了一个虚拟主机,指定了监听端口和服务器名称。**
  • location** 指令定义了不同 URL 路径的处理方式,包括静态文件的根目录和索引文件。**
  • alias** 指令用于创建一个虚拟目录,将 URL 映射到文件系统的不同位置。**
  • error_page** 指令配置了自定义错误页面,并将特定 HTTP 错误代码映射到相应的页面**
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    312 引用 • 546 回帖 • 2 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...