微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何为 nginx 入口中的特定位置添加 limit_req 区域

如何解决如何为 nginx 入口中的特定位置添加 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 {
  ---------
  -------
}

} 

我想为位置/login.info 添加速率限制,我尝试了location-snippet,但它在/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;

Notice that

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

为共享内存区域设置参数,该区域将保持状态 各种键。特别地,状态存储当前的数量 过分的要求。键可以包含文本、变量及其 组合。不考虑具有空键值的请求。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。