这是一个关于代理应该如何处理 HTTPS 请求的问题。如果代理后面有 2 个用户,并且都一个接一个地转到 https://example.com,代理是否可以重用之前通过 example.com 为 user1 创建的现有 TCP 连接。
TCP 和 HTTPS 是不同的协议,因此它似乎不会影响任何事情,实际上也不会。
在现有的 TLS 实现中是否有一些东西可能不喜欢在同一连接上有两个不同会话的这种行为?从安全角度来看,为不同的用户使用相同的 TCP 连接是不是一个坏主意?
答案 0 :(得分:2)
您的意思是如果两个 HTTP 客户端向一个反向 HTTP 代理发出请求,该代理是否可以重用与 HTTP 服务器的 TCP 连接?
是的,绝对。这称为连接池,在实践中很常见。代理打开一个与每个后端端点的持久连接池。然后,代理对请求进行排队,每个请求都通过可用的 TCP 连接发送。
从 TLS 的角度来看,如果代理是 HTTP 代理 (L7),则客户端与代理而不是后端 Web 服务器执行 TLS 握手,因此没有问题。但是,如果代理运行在 L4,则 TLS 终止必须发生在下游(TLS 直通),这会带来复杂性。
我目前的理解是 L4 代理与后端保持 1:1 的连接。这意味着,每个传入连接都有一个到后端的相应传出连接,这消除了我们重用连接和利用连接池的能力。
例如,NGINX 是这样做的:
<块引用>NGINX 维护一个保活连接的“缓存”——一组到上游服务器的空闲保活连接——当它需要向上游转发请求时,它使用缓存中已经建立的保活连接,而不是创建一个新的 TCP 连接.
Load Balancing with NGINX and NGINX Plus, Part 2
有用的资源