![为什么 Nginx 在处理客户端的顺序请求时不能重用与上游的连接?](https://linux22.com/image/685822/%E4%B8%BA%E4%BB%80%E4%B9%88%20Nginx%20%E5%9C%A8%E5%A4%84%E7%90%86%E5%AE%A2%E6%88%B7%E7%AB%AF%E7%9A%84%E9%A1%BA%E5%BA%8F%E8%AF%B7%E6%B1%82%E6%97%B6%E4%B8%8D%E8%83%BD%E9%87%8D%E7%94%A8%E4%B8%8E%E4%B8%8A%E6%B8%B8%E7%9A%84%E8%BF%9E%E6%8E%A5%EF%BC%9F.png)
正如所提到的http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive
需要特别注意的是,keepalive 指令并不限制 Nginx 工作进程可以打开的到上游服务器的连接总数。应将 connections 参数设置为足够小的数字,以便上游服务器也能处理新传入的连接。
我想了解如果有新客户到来,为什么他们不能使用现有的保持连接?
每次有新客户端到来时,Nginx 是否需要与上游建立新的连接?
答案1
我认为这意味着是如果进入的请求数超过了可用的保持活动连接数,那么仍然会打开一个新的请求。
此外,请注意你引用的前面的句子http://nginx.org/r/keepalive:
connections 参数设置每个工作进程的缓存中保留的与上游服务器的最大空闲保持连接数。当超过此数量时,将关闭最近最少使用的连接。
请注意“每个工作进程”部分。我可以想象,如果一个连接(带有新的客户端请求)进入一个工作进程,而该进程与给定服务器的保持连接数已经超过其数量,那么尽管其他一些工作进程与同一上游服务器的一些保持连接仍然处于空闲状态,但仍会打开一个新的连接。
如果你需要更多细节,可能值得深入研究ngx_http_upstream_keepalive_module.c
。