Nginx 如何使用网卡上的多个 IP 地址去连接同一个 Upstream 从而突破连接数限制?

2019-06-05 13:39:38 +08:00
 myrfy001

如果使用 Ngxin 做网关,假设只使用 Nginx 所在机器网卡的一个 IP 地址,在确定连接到 upstream 的( saddr,sport,daddr, dport )四元组中,只有 sport 是可变的。为了突破这个限制,需要在 Nginx 所在的机器配置多个 IP 地址,那么如何才能让 Nginx 随机使用多个本机 IP 地址发起对 Upstream 的链接呢?

Transparent 模式不在讨论范围内,因为需要在 Upstream 和 Nginx 所在的机器修改路由表,难以维护。

3377 次点击
所在节点    NGINX
7 条回复
Livid
2019-06-05 13:58:04 +08:00
如果打开了 keepalive 也需要那么多连接数么?
myrfy001
2019-06-05 14:02:01 +08:00
@Livid 可以假设这是一个消息推送服务,本身就是大量的长连接。
keepeye
2019-06-05 14:08:24 +08:00
proxy_bind?
q137534976
2019-06-05 14:24:17 +08:00
proxy_bind 可以指定源地址,但无法实现随机;
你可以把 Lua 模块编译上,proxy_bind 指定一个变量,用 lua 去动态改这个变量
pmispig
2019-06-05 14:33:41 +08:00
消息推送服务是指 client -> nginx 长链接,不是 nginx ->upstream 长链接。这种动不动百万并发的歪门邪道少研究
nekoyaki
2019-06-05 14:37:04 +08:00
我不知道你这个场景具体是 websock 还是 tcp 代理,也不知道其他业务场景,我感觉如果单纯考虑大量“长连接”的话,可能换 haproxy 更合适?
millken
2019-06-05 16:38:17 +08:00
ngx_lua 很容易实现

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/571104

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX