我想知道 nginx 如何处理大量活动的 websocket 连接?有很多限制,例如打开文件的数量、IP <-> (IP, 端口) 之间最多 65k 个 TCP 连接等等。
当我使用 nginx 作为反向代理,并且在 websocket 的上游有 5 个节点时,nginx 和每个节点之间是否有最多 65k 个活动 TCP 连接?当然,如果我有超过 300k 个由 nginx 提供服务的活动客户端,那就这样吧。或者 nginx websocket 代理以另一种方式工作?
我还有一个问题:我应该调整哪些参数(限制)来处理这么多的连接?
答案1
就目前而言,您的理解是正确的,但您的实际限制将是文件句柄。每个套接字连接都需要一个 Linux 文件句柄,而这些句柄的默认 ulimit 为 1024。/proc/sys/fs/file-max 设置整个系统的限制。您需要提高这些限制以处理高 nginx 连接率。
NGINX 开发人员已经在六核服务器上测试了多达 50,000 个连接:
https://www.nginx.com/blog/nginx-websockets-performance/
现实情况是,如果您想要在现实世界中拥有数万个连接,则需要转到循环 DNS 后面的多个反向代理。例如,这就是 Amazon 的 Elastic Load Balancer 的工作方式。如果您在 AWS 云上搜索 Slack.com 之类的东西并输入“nslookup slack.com”,您将获得一长串 IP 地址。再次输入它,您将获得一个不同的列表,其中的 IP 地址会轮换,因此不同的 IP 地址位于列表的开头。这些是循环 DNS 上的 Amazon AWS ELB 反向代理 (),它们将请求转发到实际的应用程序服务器。此时,困难的部分变成了管理从 DNS 注册和取消注册反向代理,或者管理 IP 地址接管(如果您打算这样做)。难题,这就是为什么我使用亚马逊的解决方案而不是自己动手的原因。