![](/img/trans.png)
[英]Flask Application is not getting deployed at 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.