request-block插件实现了基于URL、请求头等特征屏蔽HTTP请求,可以用于防护部分站点资源不对外部暴露。本文介绍如何配置request-block插件。
插件类型
安全防护。
配置字段
名称 | 数据类型 | 填写要求 | 默认值 | 描述 |
block_urls | array of string | 选填。block_urls,block_headers,block_bodys中至少必填一项。 | - | 配置用于匹配需要屏蔽URL的字符串。 |
block_headers | array of string | 选填。block_urls,block_headers,block_bodys中至少必填一项。 | - | 配置用于匹配需要屏蔽请求Header的字符串。 |
block_bodys | array of string | 选填。block_urls,block_headers,block_bodys中至少必填一项。 | - | 配置用于匹配需要屏蔽请求Body的字符串。 |
blocked_code | number | 选填。 | 403 | 配置请求被屏蔽时返回的HTTP状态码。 |
blocked_message | string | 选填。 | - | 配置请求被屏蔽时返回的HTTP应答Body。 |
case_sensitive | bool | 选填。 | true | 配置匹配时是否区分大小写。默认区分。 |
配置示例
屏蔽请求URL路径
block_urls:
- swagger.html
- foo=bar
case_sensitive: false
根据该配置,下列请求将被禁止访问。
curl http://example.com?foo=Bar
curl http://exmaple.com/Swagger.html
屏蔽请求Header
block_headers:
- example-key
- example-value
根据该配置,下列请求将被禁止访问。
curl http://example.com -H 'example-key: 123'
curl http://exmaple.com -H 'my-header: example-value'
屏蔽请求Body
block_bodys:
- "hello world"
case_sensitive: false
根据该配置,下列请求将被禁止访问。
curl http://example.com -d 'Hello World'
curl http://exmaple.com -d 'hello world'
对特定路由或域名开启
在route-a
和route-b
两个路由做如下插件配置:
block_bodys:
- "hello world"
在*.example.com
和test.com
两个域名做如下插件配置:
block_urls:
- "swagger.html"
block_bodys:
- "hello world"
route-a
和route-b
即在创建网关路由时填写的路由名称,当匹配到这两个路由时,将使用此段配置。*.example.com
和test.com
用于匹配请求的域名,当发现域名匹配时,将使用此配置。配置的匹配生效顺序,将按照规则的排列顺序,匹配第一个规则后生效对应配置,后续规则将被忽略。
请求Body大小限制
当配置了block_bodys
时,仅支持小于32MB的请求Body进行匹配。若请求Body大于此限制,并且不存在匹配到的block_urls
和block_headers
项时,不会对该请求执行屏蔽操作。
当配置了block_bodys
时,若请求Body超过全局配置DownstreamConnectionBufferLimits,将返回413 Payload Too Large
, 请在参数配置页调高此项。注意调高此参数配置后,网关内存使用将有显著增加。