首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EC2 -侦听HTTPS请求并重定向到SpringBoot

EC2 -侦听HTTPS请求并重定向到SpringBoot
EN

Stack Overflow用户
提问于 2021-08-18 03:39:34
回答 2查看 913关注 0票数 2

我有一个托管在Amazon扩容上的前端反应应用程序和一个托管在亚马逊SpringBoot EC2上的后端EC2应用程序。

我的域只能发送https请求,但默认情况下SpringBoot是http。我的问题是,我的EC2实例如何侦听HTTPS请求,然后在SpringBoot中重定向到http端口。

我查看了其他帖子,似乎您不应该将SSL添加到SpringBoot应用程序中,而应该添加到前面的负载均衡器中。在今天结束时,这就是我想要的:

代码语言:javascript
复制
POST https: xxx.xxx.xxxx:443/user/signin
---> http: xxx.xxx.xxxx:8080/user/signin

??更新??更新?

Marcin提供了一个关于如何解决这个问题的顶级想法,谢谢!

我还附上了像我这样的人的一步一步的解决方案,请参阅下面的答案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-19 07:31:20

下面是使用aws ec2将https转换为https的完整步骤

免责声明:我只研究了几个小时,一些概念可能不准确或错误,但按照本指南完成工作,纠正我的误导性信息

(1)弹跳:

将您的服务器端口保持在8080上,不要将其更改为https (443)

(2)确保您的EC2实例设置了正确的*VPC*和*IPv4 4 CIDR*

转到Instance -> Description -> VPC ID,然后单击它

现在您应该看到VPCs的列表,找到与实例相关联的列表。

detail中, -> IPv4 CIDR ->检查它是否具有以下格式的两个或多个值:

xxx.xx.0.0/16

xxx.xx.0.0/16

(3)如果设置了两个IPv4 CIDR,则跳过此步骤

选择VPC实例->,单击Actions -> 编辑CIDRS -> 添加新的IPv4 CIDR

确保两个IPv4 CIDR位于不同的区域

关于IPv4 CIDR的更多信息:

https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html

(4)现在我们要创建一个应用程序负载均衡器,用于侦听https:443请求。

为每个步骤选择 HTTPS应用程序平衡器(如aws所示)

步骤1. 负载均衡器协议和端口: https: 443

步骤1. 可用性区域:现在是选择VPC和两个区域的时候了

步骤2. 安全设置从中选择一个证书(假设您在53号公路上有一个证书)

步骤3. 安全组:确保选择与EC2实例相同的

步骤4. 路由 http: 8080,目标类型:实例

步骤5. 注册目标选择您的EC2实例,在端口80上,请不要忘记!

(5)现在设置负载均衡器,对EC2实例的安全组进行二次检查

转到instances -> Description -> Security Group并单击它

对于入站规则,请保持端口443、22、80、8080 不移除8080

443用于https,22用于ssh客户端,80用于tomcat。

(6)现在查找用于https请求的ips。

这不是EC2实例的公共ip地址

您的应用程序在负载均衡器后面,ip地址应该是网络接口IP。每个网络接口IP与您的VPC使用的子网ID相关联。

因此,转到网络接口在您的EC2控制台。在EC2的VPC下选择任何一个带有subnetId的网络接口ID。

单击Details ->并向下滚动以查找所需的公共IP

(7)在开始下一步之前,请确保具备以下内容:

  1. 一个托管在53号公路中的域(我有一个用于我的前端UI)
  2. 从aws证书管理器获得的SSL证书
  3. 您应该在步骤3中将这个SSL放到负载均衡器中。

如果不知道该做什么,请查看以下stackOverFlow帖子以获得答案:

将SSL添加到路由53 AWS上托管的域

(8)在下一步之前,请确保了解以下内容:

如果您在postman中直接测试https请求,您可能会成功。

但是,如果在生产中使用,您就会失败,如下所示:

axios.get("https:xxx.xxx.xxx:443/user/signin");

(failed)net:ERR_CERT_COMMON_NAME_INVALID

这是因为无论您使用的是什么静态IP,都与您的AName证书不匹配。例如,如果您的域名是helloworld.com,,则后端API请求应该是https://helloworld.com/user/signin

(9)在53号公路中创建子域并配置它

我很懒,请看下面的链接:

https://aws.amazon.com/premiumsupport/knowledge-center/create-subdomain-route-53/

(10)最后一步

现在您有了一个工作子域,让我们将它用于您的网络接口IP

为了进行测试,您可以从网络接口IP列表中选择任何IP。转到路由53 -> 承载区域 ->选择您的子域,例如: -> create record

记录格式

  1. 名称: api.helloworld.com
  2. 类型:a
  3. 路由:简单
  4. 价值:

(11)对不起尚未准备好

请等待两天DNS记录的更新,如果DNS可以解释您的子域,让我们假设api.helloworld.com 进入您的网络接口IP,并且您已经可以在邮递员中测试您的IP的正确性了,您应该已经准备好了!

票数 1
EN

Stack Overflow用户

发布于 2021-08-18 03:44:28

如果您想继续只使用实例(无负载均衡器或cloudfront),则需要为其获取您自己的域。然后,您必须为此注册一个有效的公共SSL证书,例如letsencyrpt。一旦有了它,就可以在实例上设置nginx以接受https连接,并以http的形式转发到spring引导。

更简单的方法是使用应用负载平衡器。您仍然需要您自己的,但是一旦您拥有了它,您就可以轻松地从ACM获得免费的SSL证书,然后在平衡器上部署它。不需要改变你的情况。所以应该是:

代码语言:javascript
复制
Client ---(HTTPS)---> ALB ---(HTTP)---> EC2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68826274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档