【问题标题】:How to add limit_req zone for a particular location in nginx ingress如何在 nginx 入口中为特定位置添加 limit_req 区域
【发布时间】:2021-03-24 13:23:34
【问题描述】:

我有一个类似下面的入口

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-sn-p,但它在 /login/info 内创建嵌套位置,此 api 的结果是 404,任何方法都可以这个?

【问题讨论】:

  • 您可以通过编辑您的问题分享您尝试过的 location-sn-ps 吗?
  • 位置 ~* ^/login/info\/?(?.*) { limit_req zone=one; }
  • 您能否编辑您的问题,以便我们查看您的语法格式?

标签: nginx kubernetes kubernetes-ingress nginx-ingress rate-limiting


【解决方案1】:

这是一个社区 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

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

【讨论】:

    猜你喜欢
    • 2019-05-31
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 2018-11-22
    • 2021-05-16
    • 1970-01-01
    相关资源
    最近更新 更多