如何在nginxingress中为特定位置添加limit_req区域



我有一个类似下面的入口

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: staging-ingress-rules-login
annotations:
kubernetes.io/ingress.class: 'nginx'
nginx.ingress.kubernetes.io/proxy-body-size: '0'
spec:
rules:
- host: staging.mysite.com
http:
paths:
- path: /
backend:
serviceName: login
servicePort: 80
- path: /login/info
backend:
serviceName: login
servicePort: 80

nginx.conf类似于

server { 
location / {
---------
---------
}
location /login/info {
---------
-------
}
} 

我想添加location/login.info的速率限制,我尝试了locationsnippet,但它在/login/info中创建了嵌套的位置,这个api的结果是404,有什么方法可以做到吗?

这是一个社区wiki答案,请随意编辑和扩展。

由于我们缺乏有关您的配置的一些细节,我将解释您如何处理这一问题。

您可以使用以下注释来添加自定义位置块:

nginx.ingress.kubernetes.io/configuration-snippet: |
limit_req zone=authentication_ratelimit nodelay;

然后使用映射,例如:

http-snippets: |
map $uri $with_limit_req {
default 0;
"~*^/authenticate$" 1;
}
map $with_limit_req $auth_limit_req_key {
default '';
'1'     $binary_remote_addr; # the limit key
}
limit_req_zone $auth_limit_req_key zone=authentication_ratelimit:10m rate=1r/s;

注意:

Syntax:   limit_req_zone key zone=name:size rate=rate [sync];
Default:  —
Context:  http

设置共享内存区域的参数,该区域将保留各种按键。特别是,该状态存储请求过多。键可以包含文本、变量及其结合体键值为空的请求不会被计入。

相关内容

  • 没有找到相关文章

最新更新