Nginx基础之请求限制

基础阶段回顾:

Nginx基础之简介与快速安装

Nginx基础之安装目录和配置语法详解

Nginx基础之配置文件nginx.conf

Nginx基础之官方模块

前言知识: 

HTTP协议版本

连接关系

HTTP1.0TCP不能复用
HTTP1.1顺序性TCP复用
HTTP2.0多路复用TCP复用

HTTP请求建立在一次TCP连接基础上, 一次TCP请求至少产生一次HTTP请求

连接频率限制的配置语法: limit_conn_zone

开辟空间做存储连接状态:

systax: limit_conn_zone  $[Key的名称, 例如nginx的ip对应的Key为remote_addr] zone=[开辟的空间的名称(自定义的)]:[所要开辟的空间的大小, 例如1m/2m10m...];

default: 无配置

context: http域

调用上面自定义的空间名称:

systax: limit_conn [要调用的自定义的空间的名称] [并发限制数, 表示同一时间有多少个];

default: 无配置

context: http域/server域/location域

进入default.conf文件进行配置:

借助ab压力测试工具进行压力测试:

ab -n 20 -c 20 http://192.168.19.134/html2.html

情景① 不开启任何配置:

情景② 开启配置: 

限制并发连接数为1:

请求频率限制的配置语法: limit_req_zone

开辟空间做存储连接状态:

systax: limit_req_zone $[Key的名称, 例如nginx的ip对应的Key为remote_addr] zone=[开辟的空间的名称(自定义的)]:[所要开辟的空间的大小, 例如1m/2m10m...] rate=[以秒为单位的请求限制多少个];

default: 无配置

context: http域

调用上面自定义的空间名称:

systax: limit_req_zone=[要调用的自定义的空间的名称] [burst=number] [nodelay];

default: 无配置

context: http域/server域/location域

进入default.conf文件进行配置:

借助ab压力测试工具进行压力测试:

ab -n 20 -c 20 http://192.168.19.134/html2.html

情景① 不开启任何配置:

情景② 开启配置:

无参:

设置参数burst=3和nodelay:

附上配置文件中的内容:

limit_conn_zone $binary_remote_addr zone=conn_zone:1m;

limit_req_zone $binary_remote_addr zone=req_zone:1m rate=1r/s;

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html/test;
        #limit_conn conn_zone 1;
        limit_req zone=req_zone burst=3 nodelay;
        #limit_req zone=req_zone burst=3;
        #limit_req zone=req_zone;
        index  index.html index.htm;
    }

    error_page   500 502 503 504 404  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

 

<think>好的,我现在需要帮助用户在Nginx中配置限制请求头中的Referer。首先,我得回忆一下Nginx的相关配置模块,记得有一个valid_referers指令可以用来检查Referer头。用户的问题是如何配置,所以我得详细说明步骤,并且给出示例。 首先,用户可能需要知道如何启用这个模块,不过根据引用[1]和[3],valid_referers是内置在ngx_http_referer_module中的,可能不需要额外安装。所以第一步应该是在server或location块中使用valid_referers指令。 接下来,需要说明valid_referers的参数,比如none(直接访问没有Referer)、blocked(Referer存在但被防火墙或代理删除了)、以及特定的域名或正则表达式。然后通过if语句判断$invalid_referer变量,如果无效则返回403。 还要注意配置的位置,比如在server或location块里。引用[3]中的例子是在location /protected-content/里配置的,这可以防止特定目录的盗链。另外,引用[2]提到用正则表达式来阻止特定的Referer,比如badwebsite.com,这也是一个常见需求,需要包含在配置示例中。 用户可能还需要了解不同的应用场景,比如允许空Referer或者特定域名,或者完全阻止某些来源。需要分点说明不同的配置方法,并给出对应的示例。 另外,要注意Nginx配置的正确性,比如if语句的使用可能有一些注意事项,虽然这里的问题不涉及复杂逻辑,但要确保语法正确,比如使用~*进行不区分大小写的匹配。 最后,生成相关问题的时候,可以想到其他安全配置,比如防盗链、基于User-Agent的限制,或者如何结合其他模块如gzip一起使用。不过根据引用[4],gzip是另一个模块,可能暂时不需要涉及,但可以作为相关问题提出。 现在需要组织回答的结构,先介绍valid_referers指令,然后分步骤说明配置方法,给出不同场景的例子,并提醒用户测试和重载配置。同时要引用提供的参考资料,比如引用[1]、[2]、[3]中的配置示例。确保使用正确的LaTeX格式,比如变量用$...$,独立公式用$$...$$,但这个问题可能不需要数学公式,所以主要注意代码块的格式和相关术语的正确使用。</think>### Nginx 配置限制Referer的方法 在Nginx限制HTTP请求头中的`Referer`,可通过`ngx_http_referer_module`模块实现,用于防盗链或限制非法来源访问。以下是具步骤和示例: --- #### **1. 基础配置:允许指定来源** 在`server`或`location`块中添加`valid_referers`指令,定义合法的`Referer`来源: ```nginx location /protected-resources/ { valid_referers none blocked example.com *.example.org; if ($invalid_referer) { return 403; } root /path/to/files; } ``` - **参数说明**: - `none`:允许无`Referer`的请求(如直接访问)。 - `blocked`:允许`Referer`被防火墙或代理移除的请求。 - `example.com`:允许该域名及其子域。 - `*.example.org`:匹配所有以`.example.org`结尾的域名。 - **逻辑**:若`Referer`不在白名单中,`$invalid_referer`为`1`,返回403禁止访问[^3]。 --- #### **2. 正则匹配:禁止特定来源** 使用正则表达式拦截包含特定关键词的`Referer`: ```nginx server { listen 80; server_name example.com; if ($http_referer ~* (badwebsite\.com|spamdomain\.net)) { return 403; } } ``` - `~*`表示不区分大小写的正则匹配,拦截`badwebsite.com`或`spamdomain.net`的请求[^2]。 --- #### **3. 综合场景:防盗链配置** 限制图片等静态资源仅允许本站访问: ```nginx location ~ \.(jpg|png|gif)$ { valid_referers blocked example.com; if ($invalid_referer) { return 403; } expires 7d; access_log off; } ``` - 仅允许本站(`example.com`)或`Referer`被过滤的请求访问图片,其他来源返回403[^1]。 --- #### **4. 注意事项** - **性能影响**:`if`指令在Nginx中需谨慎使用,避免复杂逻辑影响性能。 - **测试配置**:修改后执行`nginx -t`检查语法,再通过`nginx -s reload`重载配置。 - **优先级**:`location`块的匹配规则可能影响配置生效顺序。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值