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

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

Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

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

    文件链接损坏,请在文件下方留言,我们将会及时更新来自备份服务器的新链接。

  • 我们拥有多账户检测系统,对于重复注册我们将采取严厉措施!提示:如果您的账户超过180天处于非活动状态,系统将自动删除您的账户!

    We have a multi account detection system, and we will take strict measures against duplicate registrations! Tip: If your account has been inactive for more than 180 days, the system will automatically delete your account!

oksgo

Administrator

管理成员
贡献: 25%
注册
10 16, 2023
消息
1,351
G
354 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 错误。
 

相似主题

  • 置顶
鉴于很多用户反馈,限制下载是一项令人讨厌的政策。即日起将启用积分下载系统。不再限制每日下载次数。某些文件需要积分才能下载! 积分获得途径政策如下: 新注册用户 每日登录随机获得 出售自己的文件 上传头像获得积分 讨论板块发布新主题 回复帖子获得 快速获得积分通道 Given the feedback from many users, restricting downloads is a...
19
116
0
  • 置顶
一、XenForo 安装教程 1. 环境准备 1.1. 检查服务器配置确保你的服务器满足 XenForo 的系统要求: 操作系统:Linux(推荐),Windows 或 Mac OS 也可以使用。 Web 服务器:Apache 2.4 或 Nginx 1.18 及以上版本。 PHP:支持 PHP 7.4 至 PHP 8.2(推荐 PHP 8.0 或 8.1)。...
0
46
0
oksgo 提交新资源: [OzzModz] Raffles for XenForo - [OzzModz] Raffles for XenForo 抽奖、赠品和竞赛(无论您想如何称呼它们)都是增加任何论坛流量的好方法。 特点: 为每次抽奖定义不同的奖品图像。 根据每次抽奖的情况设定抽奖规则。 将抽奖设置为在未来开始或者在您创建抽奖的当天开始。...
0
11
0
很长时间没写文章了,这几天我安装了最新的xf2.3b2,因为2.3版本对系统有了更高的要求,我升级了mysql、php,但因我的虚拟机配置一般,打算使用docker 配置elasticsearch 7.17.18,供xf enhanced search 使用。 下面是我使用docker 安装 elasticsearch 7.17.18(设置服务访问密码)...
9
255
0
安装Java Elasticsearch是一个Java应用程序,因此第一步是安装Java。 首先运行更新列表并安装更新 然后以 root 或具有 sudo privileges 命令的用户身份运行以下命令以安装OpenJDK软件包: 通过输入下述指令来验证Java是否已安装: 输出应类似如下所示: openjdk version "11.0.6" 2020-01-14OpenJDK...
15
330
1
后退
顶部