- 注册
- 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 配置中,设置如下所示:
limit_req 包含突发参数 - 该参数确定最大、短期超出限制的次数。同时,对于超过限制的IP地址进一步发出的请求,请求数量将被重新计算并调整为一定的限制。那么,一般来说,如果1秒内有4个请求来自该地址,那么下一秒就不会处理任何请求。直到每秒请求数恢复到正常限制。
如果超出 limit_zone 和 limit_req_zone 限制,nginx 将返回 503 错误。
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 错误。