如果使用 Ngxin 做网关,假设只使用 Nginx 所在机器网卡的一个 IP 地址,在确定连接到 upstream 的( saddr,sport,daddr, dport )四元组中,只有 sport 是可变的。为了突破这个限制,需要在 Nginx 所在的机器配置多个 IP 地址,那么如何才能让 Nginx 随机使大带宽服务器用多个本机 IP 地址发起对 Upstream 的链接呢?
Transparent 模式不在讨论范围内,因为需要在 Upstream 和 Nginx 所在的机器修改路由表,难以维护。
如果打开了 keepalive 也需要那么多连接数么?
可以假设这是一个消息推送服务,本身就是大量的长连接。
proxy_bind?
proxy_bind 可以指定源地址,但无法实现随机;
你可以把 Lua 模块编译上,proxy_bind 指定一个变量,用 lua 去动态改这个变量
消息推送服务是指 client -> nginx 长链接,不是 nginx ->upstream 长链接。这种动不动百万并发的歪门邪道少研究
我不知道你这个场景具体是 websock 还是 tcp 代理,也不知道其他业务场景,我感觉如果单纯考虑大量“长连接”的话,可能换 haproxy 更合适?
ngx_lua 很容易实现