nginx接收到客户端连接,应该是构建了一个TCP连接,看很多解释,但还是不太明白具体原理。我看有的是说nginx每个worker进程,通过worker_connections构建了一个ngx_connection_t结构的连接池,连接放在这个连接池中,并没有占用socket的数量,通过epoll的异步可以用的时候再创建socket套接字。谁能帮我完整地梳理一下Nginx突破 65535的原理么
首先要明白,tcp socket是需要占用什么资源。对于客户端,你需要有一个local port 来接收服务端发来的数据;而服务端就都使用相同的端口,那就是listen 的port。
这样,在服务端(nginx)看到的socket,就都会是服务端口为80或者443的;这个时候,nginx进程能够处理的socket数量,就仅仅受限于服务端对进程fd(文件描述符)数量的限制。如果你设置为unlimited,则这个限制就仅仅受限于操作系统的内存大小了。
简单来说就是,tcp socket ,请求发起方的端口是稀缺资源,不同socket不能重复;而服务端的socket,都是使用相同的端口(监听什么,就是什么)。
你说的65535 应该是系统可最大打开的端口数。nginx作为server,在socket上只需打开80和433就行。实际可建立的链接和OS的配置以及内存大小有关。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。