java - 如何通过 ELB 将 HTTPS 流量路由到运行 Java JHipster webApp 的 EC2 容器

标签 java amazon-web-services amazon-ec2 https amazon-elb

我有一个 JHipster 整体应用程序(Angular + Java SpringBoot + Tomcat 容器,一切都在一起)成功部署在 EC2 中。我可以设置安全组,以便启用对公共(public) DNS 的 8443 传入请求,并且我可以从任何浏览器访问它。

之后,我向 Amazon 请求了我已通过 Route53 获取的域的公共(public)证书。

因此,我们的想法是使用 443 而不是 8443,以及真实域(而不是 AWS 提供的公共(public) DNS),因此实际上我创建了一个 ELB(全部位于同一 VPC、安全组和托管区域中)。此 ELB 正在监听 443,并默认重定向到 8443。

但是..ERR_CONNECTION_REFUSED是浏览器显示的内容..

值得一提的是,由于 AWS 不允许我们在运行应用程序的 EC2 的 JDK 中下载证书(至少我在控制台中没有看到任何选项),因此我安装了一个自定义证书(使用 keytools 生成),以便将其应用到 Tomcat 中以监听已经提到的 8443 端口。

我还尝试在 8080 而不是 8443 中运行(当然还更新了安全组),但没有变化..

你能给我一些关于我缺少什么的线索吗?到目前为止,我看到的独特方法是创建一个带有 NGINX 的新 EC2,充当 ELB 后面的反向代理(可能具有重写策略),但除非绝对需要,否则我更愿意避免额外的复杂性。

其他数据:

  • Tomcat 服务器配置:
    server:
        port: 8443
        server.ssl.key-store: keystore.p12
        server.ssl.key-store-password: thePassword
        server.ssl.keyStoreType: PKCS12
        server.ssl.keyAlias: theKeyAlias
  • 安全组入站规则:
    Custom TCP 8443 with 172.31.0.0/16 (the same range of the ELB)
    HTTPS TCP 443 with 0.0.0.0/0 and ::/0
  • 此外,AWS 证书已启用并已颁发(CNAME 记录集是在 Route53 中创建的)

**更新 1 - 2019 年 2 月 4 日 22:21 (GMT-3) **

伙计们,我最终决定在 ELB 后面使用 NGINX。我还意识到 NGINX 和应用程序服务器之间的通信可以是 HTTP,因此我的应用程序将监听端口 8080,稍微简化了方案。我还意识到,我只需要一个证书即可拥有“浏览器挂锁”并加密客户端和 ELB 之间的所有流量,因此无论是否无法下载它(也不需要在 NGINX 或 App.Server 中安装)。

最佳答案

在 Apache 级别,您应该在端口 443 上添加一个监听器,该监听器将代理传递端口 8443 上的请求。这将确保域端口 443 上的所有传入请求都将传递到在服务器端口 8443 上运行的应用程序

listen 443;
location /{
proxy_pass  http://127.0.0.1:8443;

}

关于java - 如何通过 ELB 将 HTTPS 流量路由到运行 Java JHipster webApp 的 EC2 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54472827/

相关文章:

node.js - AWS 有没有办法隐藏我的nodejs 代码,同时向我的客户公开与访问和存储相关的账单信息

postgresql - 如何从 EC2 Linux 实例加载数据到 Postgresql RDS

amazon-web-services - AWS 上的 Kubernetes 使用 Kops - 用于 kubectl 的 kube-apiserver 身份验证

ssh - 将文件从一个 EC2 实例同步到另一个

java - 在小程序声明中调用 javascript 函数

amazon-web-services - DOWNLOAD_SOURCE 失败的 AWS CodeBuild

amazon-ec2 - 从 resolv.conf 中删除 EC2 的条目

java - IoT 将数据包从设备发送到网络服务器

java - 按颜色获取R、G、B的值

java - 你如何用 JGit 做相当于 "git show tagname"的事情?