当前位置: 首页 > 知识库问答 >
问题:

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

齐涛
2023-03-14

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

在那之后,我已经向亚马逊申请了一个我已经通过Route53获得的域的公共证书。

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

但是..浏览器显示的是ERR _ CONNECTION _ rejected..

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

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

你能给我一点线索,告诉我我错过了什么吗?到目前为止,我看到的唯一方法是用NGINX创建一个新的EC2,作为ELB背后的反向代理(可能有重写策略),但是除非绝对需要,否则我宁愿避免额外的复杂性。

附加数据:

    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中创建的)

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

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

共有2个答案

申屠昆
2023-03-14

最后问题解决了,我可以使NGINX工作正常,而且我还必须更改其他内容:

我已从应用程序负载均衡器传递到传统负载均衡器。最终方案就像我在本主题的更新中解释的那样,我的意思是:

用户通过 HTTP 或 HTTPS 通过经典 LB 进行连接,然后转到 EC2 NGINX 侦听端口 80。

然后,从NGINX到WebApp,我以这种方式使用了proxy_pass:

    location / {
        proxy_pass  http://172.x.y.z:8080;
    }

最后,NGINX中一个HTTP转发只使用HTTPS:

    proxy_set_header X-Forwarded-Proto $scheme;
    if ( $http_x_forwarded_proto != 'https' ) 
    {
       return 301 https://$host$request_uri;
    }

Lijo Abraham,您的答案帮助我有了一个明确的方向,这篇文章显示了应用的确切解决方案(这就是为什么我会绿色勾选这篇文章)。

非常感谢和问候。

**更新2019年2月1日- 10日17:21 (GMT-3) **最后,我再次使用应用程序ELB而不是经典的ELB(后者已被否决)重新制作了所有程序,一切都按预期工作,不知道为什么在开始时ELB经典没有工作(可能是安全组规则配置中的一些错误或类似的问题)。

锺离飞鸣
2023-03-14

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

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

}

 类似资料:
  • 我想让流量如下所示: 外部客户端https请求(例如。https://my-app-out-side-cluster.com) - 我遵循这篇文章来配置我的入口和外部流量,但是,由于我在集群外的服务是http,所以在使用https发出请求时,我会遇到SSL错误。但是,将请求更改为http是可行的,这是不需要的。 我的问题是,有没有办法 在入口中终止SSL(使用入口控制器) 是否将流量重定向到群集外

  • 我在VPC上有一个极光数据库。今天我需要通过lambda连接到数据库。这并不是一个问题,只是我需要在Lambda中访问互联网,所以我必须设置以下内容: 我为公共NAT添加了新的子网。 我添加了NAT网关,并将其分配给新的EIP和新的子网。 我添加了一个新的路由表,该表将所有流量路由到并将该表与在步骤1中创建的新子网相关联。 我修改了路由表,并将所有流量路由到NAT。

  • 我们有Zuul和Eureka在我们的kubernetes集群上运行。Zuul在Eureka注册。 我启动了一个名为“资源服务”的新服务,这将正确启动并注册到Eureka,所有服务都启动了。 当我试图访问Zuulendpoint以访问“resource-service”时,我得到以下错误。看起来Zuul不能映射到Resource-service,即使Resource-service注册了Eureka

  • 我正在测试gke入口以将流量路由到两个不同的服务。我的部署包括一个基本的Web容器,它部署了一个默认的蓝色网页和一个绿色网页。我能够得到响应本质上,“/”适用于蓝色或绿色部署。但是当我转到超文本传输协议:///绿色时,我得到了404响应。我已经用“/”作为绿色部署进行了测试,它显示了一个绿色网页。但是如果我转到超文本传输协议:///蓝色,它会导致404响应, 我已经通过将负载平衡器直接连接到容器上

  • 我在2个不同的私有子网中有2个EC2实例,都位于负载均衡器后面。我想通过域名https url在两个实例中的应用程序之间设置通信。我该怎么做?