【发布时间】:2023-03-10 20:35:02
【问题描述】:
目前,我有一个 ec2 实例用作开发/测试服务器,运行多个微服务。
在这些服务前面,我有一个 Spring 云网关,将流量路由到不同的服务。
在 ec2 实例前面,我有一个使用 AWS 配置的应用程序负载均衡器 (ELB),并附加了一个由 AWS Certificate Manager(托管在 go daddy 中的域)提供的证书。
如果 lb 上没有设置 HTTPS,这一切都很好,并且可以完美运行,但是一旦我在 lb 上切换到 HTTPS,我只会得到
502 Bad Gateway
在网关日志中,我得到以下异常:
decoding failed: DefaultFullHttpRequest(decodeResult: failure(java.lang.IllegalArgumentException: text is empty (possibly HTTP/0.9)), version: HTTP/1.0, content: UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeHeapByteBuf(ridx: 0, widx: 0, cap: 0))
GET /bad-request HTTP/1.0 :
经过一番搜索,我发现您必须使用以下命令显式启用 SSL:
server:
ssl:
enabled: true
但是一旦我这样做了,似乎它需要其余的细节,因为我得到了以下信息。
org.springframework.boot.web.server.WebServerException: Could not load key store 'null'
据我了解,您必须将证书上传到 jvm 证书存储中,但据我所知,您无法导出 AWS Cert Manager 提供的证书。
我之前为 dot-net-core 环境做了完全相同的事情并且没有任何问题(可能是因为它就像在同一个 docker 映像中运行它的 Web 服务器一样)我不确定如何在 Java 中继续。可能是我的方法不对,这个架构行不通。
请协助指出我的问题,或在我用尽所有选项时提出解决方案
【问题讨论】:
标签: java amazon-web-services spring-boot amazon-elastic-beanstalk spring-cloud-gateway