繁体   English   中英

速率限制 a Flask API 部署在 AWS Elastic Beanstalk

[英]Rate limit a Flask API deployed on AWS Elastic Beanstalk

我在 Flask 中创建了一个 API,它使用 Flask-Limiter package 为每个远程地址提供速率限制。

代码如下所示:

limiter = Limiter(
  app, key_func=get_remote_address,
  storage_uri=db_host,
  strategy="fixed-window",
)
limiter.init_app(app)

然后我在我想要节流的路线中使用装饰器。

问题是,当我将我的 API 部署到 AWS elastic beanstalk 时,它将限制来自任何 IP 的请求,就好像它们是相同的 IP。例如,我每分钟有 1 个请求。 我从 IP X 命中了一个端点,几秒钟后从另一个 IP 命中了一个端点,我得到了 429 响应代码。

这是因为远程地址被识别为 127.0.0.1

如何限制尝试访问我的 API 的实际 IP 地址的速率?

我限制 API 的目标是避免对我的端点进行不必要的调用(比如通过机器人或 web 报废程序)。

Elastic Beanstalk传递远程 IP 地址,它可以像这样检索,例如:

def get_remote_address_from_elastic_beanstalk(only_first: bool = True) -> Union[str, List[str], None]:
    """ Get the client's remote ip. """
   if (request.access_route):
       if only_first:
           return request.access_route[0]
       # Return full ip list
       return request.access_route
   return None

然后你可以使用:

key_func=get_remote_address_from_elastic_beanstalk

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM