我有一个用例,其中SaaS的用户需要来自服务器的出站连接来自与该用户相对应的自定义IP。我正在努力想办法做到这一点。
在此示例中,有3个用户,1个服务器和3个自定义IP,分别表示为0.0.0.0。每个客户的出站请求必须来自其IP,但是处理是在单个服务器上完成的:
User 1 requests --> server 1 --> outbound data to different destination in new TCP request coming from 0.0.0.1
User 2 requests --> server 1 --> outbound data to different destination in new TCP request coming from 0.0.0.2
User 3 requests --> server 1 --> outbound data to different destination in new TCP request coming from 0.0.0.3
我关于如何管理此问题的理论思想是为每个客户配置一台服务器作为转发代理,例如HAproxy或Squid。然后,当请求进入我的Nodejs应用程序时,它将选择与该用户相对应的代理,并通过该代理代理请求。
听起来不错,还是我想念的还有更好的方法?
编辑:该问题仅对正向代理感兴趣。反向代理不在此问题的范围内。
首先,您的服务器需要分配所有IP,它要从中发送(ip address add 0.0.0.1/32 dev eth0
该命令需要在您的Linux Shell上针对所有IP执行,然后想到了最简单的解决方案:
仅在一个服务器上创建多个node.js进程,并将每个node.js实例绑定到一个ip。
node.js instance 1: app.listen(3000, "0.0.0.1", function ()
node.js instance 2: app.listen(3000, "0.0.0.2", function ()
我想到的唯一缺点是,它需要更多的内存。但是,优点是,您可以将负载分配到多个核心上,并分散每个客户=>更安全/更好的可用性(如果一个崩溃)...注意:这仅对少数非常活跃的客户有意义。