我可以将 Nginx 作为代理放在其他代理池前面吗?

问题描述 投票:0回答:1

我编写了一个后端服务,它定期连接到网站并收集一些数据。该服务支持使用代理服务器发送请求。

现在该服务有一个预定义的(硬编码的)代理池。对于每个请求,它从池中选择一个随机代理并使用它。该服务具有可扩展性,并且可以同时运行多个实例。

看起来像这样:

我使用的代理对并发连接数没有限制。但是,如果使用同一代理服务器打开多个连接,则它们应来自同一 IP 地址。当所有服务实例都在同一台机器上运行时,这不是问题,但我正在考虑购买额外的 VPS 来在那里运行更多实例。

更新后的架构将如下所示:

我在想是否有可能将Nginx或类似的工具放在我的代理池前面,这将起到代理本身的作用。像这样的东西:

您能否帮助我理解实现此用例的最有效方法是什么?

nginx proxy vps
1个回答
0
投票

像这样的简单 NGiNX 配置应该足够了:

http {
    upstream proxy_pool {
        # Define your existing proxy servers here
        server proxy1.example.com;
        server proxy2.example.com;
        # Add more proxy servers as needed
    }

    server {
        location / {
            proxy_pass http://proxy_pool;
            # Other proxy settings, like headers, timeouts, etc.
        }
    }
}

这会将 Nginx 收到的请求转发到定义的池中的代理之一,具体取决于负载平衡算法。

VPS 实例上的后端服务应配置为使用 Nginx 服务器作为传出请求的代理。

该方法确保来自 VPS 实例的所有请求都通过集中式 Nginx 服务器进行汇集,然后通过现有代理池转发到后端网站,从而保持到同一代理服务器的连接来自同一 IP 地址(Nginx服务器的IP)。


但是:粘性会话通常通过 Nginx 中的

ip_hash
指令实现,如在此所示,将来自同一客户端 IP 的请求一致路由到同一后端服务器。这是一种以客户端为中心的方法,确保客户端的请求始终由同一台服务器处理。

在您的场景中,连接到 Nginx 代理的“客户端”不是单个最终用户,而是在各种 VPS 上运行的后端服务的实例。这些实例通过代理池向后端网站发出请求。 您已指定,如果使用同一代理服务器打开多个连接,则它们应来自同一 IP 地址。这里的挑战是确保池中特定代理服务器的所有连接都来自同一 VPS 实例,而不仅仅是同一客户端 IP。

在 Nginx 中实现粘性会话将确保来自特定 VPS 实例的所有请求始终发送到同一代理服务器。但是,它不会阻止其他 VPS 实例也被路由到同一代理服务器,这可能会违反您的限制,即与同一代理服务器的所有连接都来自同一 VPS 实例。

在这种特定情况下,您可能需要更量身定制的解决方案来协调 VPS 实例并根据连接要求确定每个实例应使用哪个代理服务器。可以考虑共享数据库或专用协调服务等协调机制,以确保所有 VPS 实例都符合您有关代理使用的特定要求。

© www.soinside.com 2019 - 2024. All rights reserved.