Tutorial/教程 Nginx-限制站点上的负载 Limit_zone/limit_req

欢迎客人!

• 开始前请阅读社区规则确保您顺利的熟悉本社区。注册用户可以提交资源,如果您有已发布资源的新版本,您可以随时更新版本!

• 文件链接损坏请在文件下方留言,我们将会及时更新来自备份服务器的新链接。如有其它问题请 提交工单 和我们联系!

• 我们拥有多账户检测系统,对于重复注册我们将采取严厉措施!

• 提示:如果您的账户超过180天处于非活动状态,系统将自动删除您的账户!

• 我们尊重我们的用户,也希望您能进行愉快的交谈.

  • • 提示:如果您的账户超过180天处于非活动状态,系统将自动删除您的账户!

    • Reminder: If your account remains inactive for more than 180 days, the system will automatically delete your account!

oksgo

Administrator
管理成员
贡献: 31%
注册
10 16, 2023
消息
1,756
G
10,070 G
  • 主题 作者
  • #1
Nginx 是一个 Web 服务器,其开发旨在高负载下工作。但无论 nginx 的功能如何,当您需要限制站点/服务器上的负载时。这里的考虑因素可能有所不同,首先,这对于那些喜欢下载整个网站,然后将其以不同名称放置的人来说是一个障碍,当然对此的保护很弱,其次,有高峰,短期-术语负载,为此没有必要扩展服务器硬件。

Nginx 有两个模块 ngx_http_limit_zone_module - 旨在限制同时连接到服务器的数量和 ngx_http_limit_req_module - 需要限制每单位时间的请求数量,这些模块的一大优点是它们被定向到特定的地址,也就是说,它们仅限制每个 IP 地址的连接或请求数量。

下载大文件(电影、图像、图片)时,需要限制同时连接(下载)的数量。该设置由两部分组成。首先,http 部分描述了 limit_zone 指令;这描述了用于存储连接和会话状态的哈希(区域)。接下来,在该位置或整个虚拟主机中,使用 limit_conn 描述允许的连接数。

在 nginx.conf 配置中,设置如下所示:
代码:
user  www;
worker_processes  2;
pid        /var/run/nginx.pid;
 
events {
    use kqueue;
    worker_connections  1024;
    multi_accept on;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    large_client_header_buffers 4 4k;
    tcp_nopush on;
    sendfile on;
    output_buffers   32 512k;
    sendfile_max_chunk  128k;
    postpone_output  1460;
    tcp_nodelay      on;
    limit_zone   lconn  $binary_remote_addr  10m;
    fastcgi_intercept_errors on;
    server_names_hash_bucket_size 64;
    client_max_body_size 15m;
server {
        listen       89.252.34.107;
        server_name  hilik.org.ua www.hilik.org.ua;
        limit_conn   lconn  1;
        location / {
                   root /usr/local/www/hilik.org.ua;
                        index  index.html index.htm;
        }
 
   }
 
}

在此示例中,我们限制了整个虚拟主机 hilik.org.ua 的同时下载(连接)数量。


设置 limit_req 与 limit_zone 非常相似。同样,配置一个区域(limit_req_zone)来存储会话状态,会话状态也基于请求来源的 IP 地址,并且还使用 limit_req 将限制引入到虚拟主机或位置。


在配置中,设置如下所示:
NGINX:
<pre lang="bash">
user  www;
worker_processes  2;
pid        /var/run/nginx.pid;
 
events {
    use kqueue;
    worker_connections  1024;
    multi_accept on;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    large_client_header_buffers 4 4k;
    tcp_nopush on;
    sendfile on;
    output_buffers   32 512k;
    sendfile_max_chunk  128k;
    postpone_output  1460;
    tcp_nodelay      on;
#Зона для учета запросов
    limit_req_zone  $binary_remote_addr  zone=lreq:10m   rate=2r/s;
    fastcgi_intercept_errors on;
    server_names_hash_bucket_size 64;
    client_max_body_size 15m;
server {
        listen       89.252.34.107;
        server_name  hilik.org.ua www.hilik.org.ua;
#Вносим ограничение
                limit_req   zone=lreq  burst=4;
        location / {
                   root /usr/local/www/hilik.org.ua;
                   index  index.html index.htm;
        }
 
   }
 
}

limit_req 包含突发参数 - 该参数确定最大、短期超出限制的次数。同时,对于超过限制的IP地址进一步发出的请求,请求数量将被重新计算并调整为一定的限制。那么,一般来说,如果1秒内有4个请求来自该地址,那么下一秒就不会处理任何请求。直到每秒请求数恢复到正常限制。

如果超出 limit_zone 和 limit_req_zone 限制,nginx 将返回 503 错误。
 

相似主题

第 1 部分:安装 Fail2ban 第 1 步:更新Debian 在安装 Fail2Ban 之前,您必须更新Debian操作系统。这可确保所有现有软件包都是最新的,并且您运行的是最新版本的软件。要更新系统,请在终端中运行以下命令: sudo apt update sudo apt upgrade 该命令 sudo apt update 从存储库中检索最新的软件包信息,并将sudo apt...
0
26
0
在您的系统上,如果您安装了多个版本的 PHP(例如 PHP 8.1、8.0、7.4、7.3、7.2、7.1 和 5.6),则默认情况下只有一个版本作为 Apache2 中的 PHP 版本。但是,如果您需要使用特定版本的 PHP 来执行当前任务,则无需删除所有其他版本。您只需将 PHP 版本切换为 Apache 中的默认版本即可。 假设您在我们的Debian系统上安装了 PHP...
0
39
0
1. 顶部 – Linux 顶部是底部。许多系统管理员经常使用 top 命令来监控Linux性能,并且在许多Linux /类 Unix 操作系统下都可用。 top命令用于以有序列表实时显示所有正在运行和活动的进程。它显示 CPU 使用情况、内存使用情况、交换内存使用情况、缓存大小、缓冲区大小、进程 PID、用户等。 top...
0
44
0
这是 xenforo 管理员在 xenforo 中使用重音符号和空格限制会员注册的一种方法 操作方法 转到 CP -> 选项 -> 用户注册 -> 向下滚动找到“用户名匹配正则表达式”部分: 填写此部分代码:
1
4K
0
PHP 8.1 是 PHP 语言的重大更新。它包含许多新功能,许多高级框架需要服务器上有 PHP 8.1 才能运行所有功能。在开始安装之前首先要注意的是,Debian 9上的 PHP 8.1在下面的存储库中不再可用。 如果您需要 8+ 版本,最好将发行版更新到Debian 11 (bullseye) 或至少Debian 10 (buster),否则在Debian 9 上您将不得不满足于...
0
52
0
后退
顶部