如何为 nginx ingress 中的特定位置添加 limit_req 区域
How to add limit_req zone for a particular location in nginx ingress
我有一个类似下面的入口
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 {
---------
-------
}
}
我想为位置 /login.info 添加速率限制,我尝试了位置片段,但它在 /login/info 中创建了嵌套位置,结果 api给出 404,有什么方法可以做到这一点?
这是一个社区 wiki 答案,请随意编辑和扩展它。
由于我们缺少有关您的配置的一些详细信息,我将解释您一般如何处理此问题。
您可以使用以下注释来添加自定义位置块:
nginx.ingress.kubernetes.io/configuration-snippet: |
limit_req zone=authentication_ratelimit nodelay;
而不是使用 map,例如:
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
Sets parameters for a shared memory zone that will keep states for
various keys. In particular, the state stores the current number of
excessive requests. The key can contain text, variables, and their
combination. Requests with an empty key value are not accounted.
我有一个类似下面的入口
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 {
---------
-------
}
}
我想为位置 /login.info 添加速率限制,我尝试了位置片段,但它在 /login/info 中创建了嵌套位置,结果 api给出 404,有什么方法可以做到这一点?
这是一个社区 wiki 答案,请随意编辑和扩展它。
由于我们缺少有关您的配置的一些详细信息,我将解释您一般如何处理此问题。
您可以使用以下注释来添加自定义位置块:
nginx.ingress.kubernetes.io/configuration-snippet: |
limit_req zone=authentication_ratelimit nodelay;
而不是使用 map,例如:
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
Sets parameters for a shared memory zone that will keep states for various keys. In particular, the state stores the current number of excessive requests. The key can contain text, variables, and their combination. Requests with an empty key value are not accounted.