nginx - 反向代理锁定功能

标签 nginx middleware haproxy

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

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

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

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

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

最佳答案

要以高可用性方式执行此操作,我相信您需要执行您编写的操作并使用某种分布式锁来确定 API 是否在使用中。

但是,如果不需要高可用性,您可以将单个 HAProxy 实例与 maxconn 结合使用为该服务器设置为 1。您还希望将 timeout queue 设置为较短的值,以便您可以处理 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;
    }
}

关于nginx - 反向代理锁定功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58650938/

相关文章:

openssl - HAproxy SSL Segfault 与 1.5-dev17

linux - 当我尝试安装 NGINX 时出现错误

php - 在 Centos 6.4 和 Nginx 服务器上使用 PHP 发送电子邮件

ssl - 使用 Varnish 和 Nginx 作为 SSL 终止的 Magento 2 - 无限重定向

node.js - docker nginx 负载平衡不适用于 Azure

c# - .net-core 中间件返回空白结果

java - 如何在axis生成的客户端中实现线程以使用java向web服务发出多个请求

tomcat - HAProxy - 传输期间连接重置

java - Mule 是否为 Camel 路线提供热部署能力?

nginx - 什么是直通负载均衡器?它与代理负载均衡器有何不同?