AWS:使路由从外部世界私有



我有一个web应用程序目前在EC2实例上运行,MySQL与它一起运行。

我正在构建另一个后端批处理服务,需要从MySQL数据库的信息。但是,我不希望它直接访问数据库。我想做的是在web应用程序中构建一些API路由,即/private/foo, /private/bar只能在内部访问(例如在VPC内),而所有其他路由将继续正常工作。

我想知道我该如何设置它?

在web应用程序前运行http/s Apache反向代理服务器。使用这个新的web层来控制所有内部和外部http/s流量。

外部交通:

  1. 配置Apache监听80/443外部流量
  2. 使用并配置Apache模块Proxy-Pass,在Apache虚拟主机配置中为80/443端口反向代理所有web应用程序流量。
  3. 在你的80/443虚拟主机配置中使用<Location >指令阻止/private的访问
  4. 更新你的DNS记录指向这个web层,而不是你的web应用程序

如何容纳内部流量:

  1. 让Apache监听一个新的端口,例如8080
  2. 配置Apache虚拟主机端口8080反向代理内部http请求到您的web应用程序,即/private

如何保护设计:

  1. 使用AWS安全组阻止8080端口上的任何外部流量。
  2. 通过在Apache 8080虚拟主机配置中使用Apache allow,deny规则来确保流量只允许来自内部ip范围

上述Apache配置的替代:

不要使用8080端口,所有内部和外部流量都使用80443端口。内部流量会对不同的域名发出请求,您的内部和外部流量可以使用基于Apache名称的虚拟主机来管理/分离https://httpd.apache.org/docs/current/vhosts/name-based.html

VPC使用的是私有子网(可以自己配置地址)。你所需要做的就是确保到达你的服务器的流量来自同一个子网。

既然你想让现有的web应用提供这些私有路由,你需要在你的代码中寻找原始IP地址。(如果你不知道怎么做,你可以问一个新的问题。)

另一种选择是运行第二个服务(或相同的服务,但在第二个端口上侦听)。如果所有私有流量从端口8081进入(例如),所有公共流量从端口8080进入,您可以使用AWS的安全组只允许子网本地流量进入端口8081,所有流量进入端口8080。

最新更新