Nginx 反向代理锁定功能

Nginx 反向代理锁定功能,nginx,middleware,haproxy,Nginx,Middleware,Haproxy,我想请求一个不受并发访问保护的Microsoft API(使用GET提取数据,然后使用POST推送数据) 为了防止任何奇怪的行为,我想在访问此Api时使用锁 我发现的最简单的方法(在不弄乱代码的情况下)是创建一个中间件服务(它将成为目标,而不是原来的)。 当被请求时,它可以在redis中保存一个锁,并将请求转发给Microsoft。 完成后,锁将被释放 然后,如果服务器收到另一个请求,它将被拒绝,我将能够执行指数退避,直到锁释放 我的问题是:我是否必须对这件事进行编码,或者这是一个可以在现有反向

我想请求一个不受并发访问保护的Microsoft API(使用GET提取数据,然后使用POST推送数据)

为了防止任何奇怪的行为,我想在访问此Api时使用锁

我发现的最简单的方法(在不弄乱代码的情况下)是创建一个中间件服务(它将成为目标,而不是原来的)。 当被请求时,它可以在redis中保存一个锁,并将请求转发给Microsoft。 完成后,锁将被释放

然后,如果服务器收到另一个请求,它将被拒绝,我将能够执行指数退避,直到锁释放


我的问题是:我是否必须对这件事进行编码,或者这是一个可以在现有反向代理中找到的功能?

要以一种高度可用的方式进行编码,我相信您需要完成编写的工作,并使用某种分布式锁来确定API是否正在使用

但是,如果不需要高可用性,则可以为该服务器使用设置为1的单个HAProxy实例。您还需要将超时队列设置为较短的值,以便处理503响应并执行您提到的指数退避

backend microsoft_api_backend
    timeout queue 2s
    server microsoft_api 1.1.1.1:80 check maxconn 1
在Nginx中,您可以执行类似的操作:

upstream microsoft_api {
  server 1.1.1.1:80 max_conns=1
  queue 1 timeout=2
}

server {
    location / {
        proxy_pass http://microsoft_api;
    }
}

我们在Python中使用REDIS锁实现了这一点,但这个解决方案似乎更简单!:)