我有一个托管在Amazon扩容上的前端反应应用程序和一个托管在亚马逊SpringBoot EC2上的后端EC2应用程序。
我的域只能发送https请求,但默认情况下SpringBoot是http。我的问题是,我的EC2实例如何侦听HTTPS请求,然后在SpringBoot中重定向到http端口。
我查看了其他帖子,似乎您不应该将SSL添加到SpringBoot应用程序中,而应该添加到前面的负载均衡器中。在今天结束时,这就是我想要的:
POST https: xxx.xxx.xxxx:443/user/signin
---> http: xxx.xxx.xxxx:8080/user/signin??更新??更新?
Marcin提供了一个关于如何解决这个问题的顶级想法,谢谢!
我还附上了像我这样的人的一步一步的解决方案,请参阅下面的答案。
发布于 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)在开始下一步之前,请确保具备以下内容:
如果不知道该做什么,请查看以下stackOverFlow帖子以获得答案:
(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
记录格式
(11)对不起尚未准备好
请等待两天DNS记录的更新,如果DNS可以解释您的子域,让我们假设api.helloworld.com 进入您的网络接口IP,并且您已经可以在邮递员中测试您的IP的正确性了,您应该已经准备好了!!
发布于 2021-08-18 03:44:28
如果您想继续只使用实例(无负载均衡器或cloudfront),则需要为其获取您自己的域。然后,您必须为此注册一个有效的公共SSL证书,例如letsencyrpt。一旦有了它,就可以在实例上设置nginx以接受https连接,并以http的形式转发到spring引导。
更简单的方法是使用应用负载平衡器。您仍然需要您自己的域,但是一旦您拥有了它,您就可以轻松地从ACM获得免费的SSL证书,然后在平衡器上部署它。不需要改变你的情况。所以应该是:
Client ---(HTTPS)---> ALB ---(HTTP)---> EC2https://stackoverflow.com/questions/68826274
复制相似问题