如何使用 AWS Lightsail 的私有域将 https 请求从一个部署发送到另一个部署?
我使用两个 docker 映像创建了两个 AWS Lightsail 容器部署。我想将 https 请求从一个映像部署(“发送方”)发送到另一个映像部署(“接收方”)。当接收器的公共端点启用时,这可以正常工作。但是,我不想向公众公开此服务,而是使用 AWS Lightsail 的私有域路由流量。
我的问题是,当我尝试将 https 请求从“发送者”发送到“接收者”的私有域 (.service.local:) 时,我在“发送者”的 html 页面上收到 https://<service_name>.service.local:52020/tester/status net::ERR_NAME_NOT_RESOLVED
。根据 Lightsail docs(“私有域”部分),我的“Lightsail 资源与您的服务位于同一 AWS 区域”应该可以访问它。
我在 stackoverflow 中发现了一个 similar Question & Answer。我使用我的区域尝试了这个答案,但失败了,因为 Lightsail 容器需要 https 而 .service.local 需要 http。创建 Amazon Linux 实例后,我成功发出 http 请求但未能发出 https 请求。 (截图如下)。同时,Lightsail 严格要求您使用 https。
如果我强制从 https 网页发送 http 请求,chrome 会生成 Mixed content: The page at ... was loaded over HTTPS but requested an insecure ...
错误。我可以通过使用 next.js api 路由来解决 https 问题,但这并不安全,因为 next.js api 路由是可公开访问的。
这里有什么我可能遗漏的地方吗?
我验证过的事情:
提前致谢。
部分截图
答案 0 :(得分:0)
我制作了我的两个 AWS Lightsail 容器,使用 next.js 的前端容器和使用 Flask 的后端容器,使用以下步骤相互通信:
/etc/resolv.conf
。更新 Dockerfile 以覆盖我的 docker 中的 /etc/resolv.conf
文件。Mixed content: The page at ... was loaded over HTTPS but requested an insecure ...
错误,我使用 next.js 的 API route 来中继 API 请求。因此,例如,前端容器上的页面将向同一容器上的 /api 发出 API 请求,而 /api 路由将向后端容器发出 http 请求。答案 1 :(得分:0)
https“页面”通常是混合内容,其中图片等资源是从http文件夹而不是“https”站点文件夹中提取的,因此获取此类资源的请求是http,因为它是按位置配置的,因此它会由 http 调用以获取,然后不被加密(请参阅需要通过该协议访问它的 https 文件夹位置的服务器配置)。
在协议方面,来自另一篇文章的消息暗示并且可能是“私下”通信不是公共网络服务,因此此类通信需要使用 ssl:// 安全协议(类似使用 ssh://)而不是 https: // 两者都需要证书的安全公共 Web 服务器协议。 (冒险猜测) ssl 可能是本地私下使用的。
以下 AWS 链接建议使用不同的网络帐户进行开发和服务。
https://aws.amazon.com/blogs/compute/a-guide-to-locally-testing-containers-with-amazon-ecs-local-endpoints-and-docker-compose/ https://aws.amazon.com/cli/