【问题标题】:Proxying WebSocket connections and ephemeral port exhaustion代理 WebSocket 连接和临时端口耗尽
【发布时间】:2015-05-31 16:33:01
【问题描述】:

我正在设计一个应用程序,它将使用 WebSocket 在发生更改时快速通知访问者。我打算用 Nginx 代理连接,因此它们可以与常规 HTTP 部分共享相同的地址。我担心的一件事是临时端口的耗尽。过去,我注意到 Nginx 和 Node 后端之间的连接数超过 25000 时会出现问题。我的问题是,以下配置是否会将限制增加到 100K?

upstream backends {
    server 127.0.0.1:5000;
    server 127.0.0.2:5000;
    server 127.0.0.3:5000;
    server 127.0.0.4:5000;
}

当然,打开文件的限制需要相应提高。

假设该技术有效,它可以与外部服务器一起使用吗?为接口分配一系列 IP 地址有多难?网络不是我的强项...

【问题讨论】:

  • 对于单个server:port combo,理论上连接的上限应该是可能的client-ip:client-port combo的数量,很多。你甚至不应该接近耗尽你的临时端口。还是我不明白这个问题?
  • @greim - 我认为这个问题与本地 Nginx 代理和本地 websocket 服务之间的临时端口有关 - 所以客户端 IP 总是相同的。这将为您提供约 65K 连接的硬上限(此处适用端口号限制)除以 2(一个用于代理客户端的端口和一个用于服务的端口)......但这只是一个假设,我正在等待某人更有知识回答。
  • 是的@Myst 我正在处理的正是这种情况。还没想出什么好办法。
  • @starshinewang - 您是否考虑过使用 Unix 套接字而不是 TCP/IP。使用不真正使用端口来识别服务的本地 Unix 套接字可能会避免某些限制,例如端口号...?
  • 确认proxy_bind可以帮助解决问题!

标签: node.js nginx websocket socket.io


【解决方案1】:

请尝试proxy_bind。它

与代理服务器的传出连接源自 指定的本地 IP 地址。参数值可以包含变量 (1.3.12)。

因此,如果我们的 nginx 代理服务器可以有多个 IP 地址,您的问题就可以解决。例如

location / {
   ...
   proxy_bind $picked_ip;
   proxy_pass http://backends;
}

变量$picked_ip 可以由在proxy_pass 之前运行的重写处理程序计算。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 2017-07-10
    相关资源
    最近更新 更多