ssl - 带有代理的 Web 请求是否总是需要新的连接?

标签 ssl https proxy

这是一个关于代理应如何处理 HTTPS 请求的问题。如果代理后面有 2 个用户并且都转到 https://example.com一个接一个地,代理能否重用之前使用 example.com 为 user1 创建的现有 TCP 连接。
TCP 和 HTTPS 都是不同的协议(protocol),所以它似乎不会影响任何东西,实际上它也不会影响任何东西。
现有的 TLS 实现中是否存在可能不喜欢在同一连接上拥有两个不同 session 的这种行为?从安全的角度来看,为不同的用户使用相同的 TCP 连接是不是一个坏主意?

最佳答案

你的意思是如果两个 HTTP 客户端向反向 HTTP 代理发出请求,代理可以重用与 HTTP 服务器的 TCP 连接吗?
scenario
是的,一点没错。这称为连接池,在实践中很常见。代理打开一个与每个后端端点的持久连接池。然后,代理对请求进行排队,每个请求都在可用的 TCP 连接上发送。
从 TLS 的角度来看,如果代理是 HTTP 代理 (L7),客户端与代理执行 TLS 握手,而不是后端 Web 服务器,因此没有问题。但是,如果代理在 L4 上运行,则 TLS 终止必须发生在下游(TLS 直通),这会带来复杂性。
我目前的理解是 L4 代理与后端保持 1:1 的连接。这意味着,每个传入连接都有一个到后端的相应传出连接,这消除了我们重用连接和利用连接池的能力。
例如,NGINX 这样做:

nginx NGINX maintains a “cache” of keepalive connections – a set of idle keepalive connections to the upstream servers – and when it needs to forward a request to an upstream, it uses an already established keepalive connection from the cache rather than creating a new TCP connection.


Load Balancing with NGINX and NGINX Plus, Part 2

有用的资源
  • Introduction to modern network load balancing and proxying , 马特·克莱因
  • TLS termination proxy
  • 关于ssl - 带有代理的 Web 请求是否总是需要新的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68615189/

    相关文章:

    ssl - 运行 Fiddler 作为 HTTP 到 HTTPS 反向代理

    php - PHP 请求是否通过 SSL 加密

    ssl - 无法在我的应用程序中使用自签名证书,但可以与 s_client 一起使用

    scala - 具有ssl-conf的Akka HTTPS(SSL)服务器

    redirect - 特定子页面的 Nginx/Django SSL 配置

    javascript - 如何验证 ssl 没有通过浏览器中的代理等拦截?

    ios - iOS 8.1 中的随机 SSL 错误。 (NSURLErrorDomain :-1200)

    java - 需要帮助建立信任库的权威链(在 Tomcat 中)

    docker - yum 更新/apk 更新/apt-get 更新在代理后面不起作用

    java - 使用 ChromeDriver 设置 browsermob 代理