Nginx在外部请求上使用不同的IP地址:

9o685dep  于 2023-03-12  发布在  Nginx
关注(0)|答案(1)|浏览(200)

我已经检查了问题,并发现一个没有答案,但它涉及到windows,所以可能有人可以帮助linux:我们的应用程序包括:
我们有10个IP地址的专用服务器,我们可以在Node js层上很好地利用这些地址。使用http包选项在每个请求上设置不同的IP:

let options = {
  hostname: 'www.example.com',
  localAddress: '202.1.1.1'
};

let req = http.request(options, function(res) {
   res.on('data', function (chunk) {
   console.log(chunk.toString());
   });
});

效果非常好:但问题是我们如何在nginx层解决这个问题:
假设我们有[127.154.24.54,127.154.24.55,127.154.24.56],假设后端API(我们的内部)正在向外部路由/example.com/api/connect发出请求,那么随机(或使用队列系统)使用上面阵列中的一个IP?
这背后的原因是第三方服务具有基于IP地址的速率限制,并且我们不希望到处改变源代码来调整http请求选项:这在nginx层上有可能实现吗?如何实现
谢谢

jm81lzqq

jm81lzqq1#

最简单的方法似乎是:

  • 设置nginx以侦听多个IP地址:
listen 12.12.12.12:80;
listen 13.13.13.13:80;
...
  • location指令中,使用proxy_bind将传出请求绑定到接受传入请求的IP:
location /api/ {
    proxy_bind $server_addr;
    proxy_pass http://example.com/api/;
}
  • 客户端必须通过不同的IP(在上面的listen部分中列出)访问上述服务器,或者通过DNS平衡,或者通过其各自配置中的上游,例如:
upstream api {
    server 12.12.12.12:80 max_fails=1 fail_timeout=30s;
    server 13.13.13.13:80 max_fails=1 fail_timeout=30s;
    ...

}

更多信息:https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/
更复杂的解决方案可能包括一些Lua代码,用于从列表或范围中选择IP,请参见此处的示例:https://serverfault.com/questions/751922/nginx-proxy-bind-to-random-ip-address-in-range

相关问题