【问题标题】:AWS ALB - Secure Web Sockets + Spring BootAWS ALB - 安全 Web 套接字 + Spring Boot
【发布时间】:2021-06-26 03:31:14
【问题描述】:

环境设置:

我在 AWS ALB(应用程序负载均衡器)后面有一个 Spring Boot 应用程序。 ALB 被配置为以 Spring 引导应用程序作为在 HTTP 上运行的目标将 HTTPs 发送给世界。

连接图:

HTTPS 443 -> ALB -> HTTP 8080 -> Spring Boot

问题:

由于应用程序在内部运行在 HTTP (8080) 上,但通过负载平衡器在 HTTPs 上提供服务,由于浏览器中的混合内容限制,我无法使用 ws://example.com 协议 t。我也不能使用“wss://example.com”,因为通过 HTTP 运行的终端服务器(Spring Boot)不接受连接。

问题:

我找到的唯一解决方案是移动最终应用程序以使用带有自签名证书的 HTTP。是否有替代解决方案从而使应用程序在 HTTP 上运行但接受 WSS 连接?

【问题讨论】:

    标签: spring amazon-web-services spring-boot spring-websocket aws-application-load-balancer


    【解决方案1】:
    • 将负载均衡器配置为将 HTTPS 流量转发到 HTTP 不适用于 websocket。相反,您必须将其配置为将 SSL(安全 TCP)转发到 TCP。这适用于 HTTP/HTTPS 流量,因为 HTTP 是基于 TCP 的协议,而 HTTPS 是带有 TLS 的 HTTP,它将允许 websocket 流量通过。

    • 将 ELB 配置为使用代理协议。使用 AWS CLI。

      首先,创建新策略:

    aws elb create-load-balancer-policy \ --load-balancer-name $ALB_NAME
    --policy-name $ALB_NAME-proxy-protocol \ --policy-type-name ProxyProtocolPolicyType \ --policy-attributes AttributeName=ProxyProtocol,AttributeValue=True

    其次,将其附加到负载均衡器。为实例正在侦听的每个端口运行一次:

    aws elb set-load-balancer-policies-for-backend-server
    --load-balancer-name $ALB_NAME \ --instance-port 8080 \ --policy-names $ALB_NAME-proxy-protocol

    【讨论】:

      猜你喜欢
      • 2019-03-28
      • 1970-01-01
      • 2016-03-06
      • 2019-01-13
      • 2018-07-21
      • 2015-02-22
      • 2019-02-14
      • 1970-01-01
      • 2020-07-22
      相关资源
      最近更新 更多