将Nginx + Django放在AWS子网中的最佳实践是公有子网还是私有子网?

40次阅读
没有评论

问题描述

想要将包含Django和Nginx的Fargate容器放在哪个子网中?最初,他将其放在公有子网中,当然可以正常工作。但是,是否可以将其放在带有NAT网关的私有子网中?如果可以,用户如何从外部访问私有子网?只有少数用户(管理员)需要访问这个Django,不需要其他用户访问。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

理想情况下,您可以将Nginx + Django容器放在私有子网中,并使用AWS负载均衡器将其后面。这样做的好处是,您可以将Nginx安装中的任何安全问题转移到AWS上,因此不再是您的问题。
以下是一些注意事项:
– 设置稍微复杂一些
– 负载均衡器的最低费用为每月25美元(如果您在应用程序负载均衡器上终止25个客户端证书,则每个证书的最低费用约为25美元)
人们可以通过跳转/堡垒主机访问Nginx服务器。对该主机的访问可能会受到IP地址和/或VPN的限制。
AWS提供的NAT网关不允许入站流量,除非它是由出站流量发起的。

方案2

使用脚本或工具来管理容器的启动顺序可能会增加复杂性,并且需要确保容器A和容器B之间的依赖关系正确设置。
另一种方法是编写脚本或使用工具来控制容器的运行顺序。您可以使用docker run命令来手动控制容器的启动顺序,或者使用一些第三方工具来管理容器的依赖关系。

示例:

以下是一个简单的bash脚本示例,可以在容器A启动后启动容器B:

#!/bin/bash
# 启动容器A
docker run -d --name container_a your_image_a
# 等待容器A完全启动
while ! docker exec container_a echo "Container A is ready"; do
  sleep 1
done
# 启动容器B
docker run -d --name container_b your_image_b

在这个示例中,我们首先使用docker run命令启动容器A,并将其命名为container_a。然后,使用一个循环来等待容器A完全启动(这里是通过在容器内运行echo命令来测试)。一旦容器A就绪,我们再使用docker run命令启动容器B,并将其命名为container_b

正文完