如何使私有子网中的 EC2 实例可从 Internet 访问? (如能够访问该网站)

How to make EC2 instance in private subnet accessible from the internet? (as in being able to visit the website)

我知道一种方法是在 public 子网中使用负载平衡器,但对于开发服务器,我们不需要负载平衡器。是否有替代选项允许从 Internet 访问私有子网中的应用程序?

如果不是,那么最好的选择是将开发服务器留在 public 子网中吗?数据库实例仍将位于私有子网中。

私有子网中的 Amazon EC2 实例永远不会可以直接从 Internet 访问,即使它有 public IP 地址。这是因为私有子网没有将子网连接到 Internet 网关的 Route Table 条目。这是有意且需要的。

那么,您的选择是:

  • 将您的实例放入 Public 子网 而不是私有子网,或者
  • 创建到 VPC 的 VPN 连接,以便您可以与 VPC 中的资源通信,包括私有子网,或者
  • 连接到 Public 子网中的实例并使用 端口转发 然后获得与私有实例的连接(见下文),或
  • 在 Public 子网中使用 负载均衡器 或代理将流量转发到私有子网(一个好处是它模仿生产设置)

端口转发是一种常用技术,用于为无法直接访问的资源提供专用连接。例如:

  • Public-Instance 在 public 子网中
  • Private-Instance 在私有子网中
  • 通过端口转发 SSH 进入 Public-Instance,然后建立与 Private-Instance
  • 的连接
  • 访问本地机器上的资源,它实际上会将请求转发给 Private-Instance

示例连接字符串为:

ssh -i pemfile ec2-user@public-instance -L 8000:private-instance:80

发送到本地计算机端口 8000 的任何请求都将转发到 Public-Instance,然后再将请求转发到 private-instance:80。只要 SSH 会话就位,这就会继续。