AWS ec2通过不带Route 53的其他主机名/域名访问本地应用

时间:2019-08-29 20:05:20

标签: amazon-web-services amazon-ec2 hostname domain-name

我的ec2上本地运行了一个Web应用程序。我可以通过ec2 Public DNS (IPv4) - ec2-x-xxx-xxx-xxx.compute-1.amazonaws.com:8000

公开访问它

但是此应用程序具有根据域URL触发两个不同的Web应用程序的功能。

localhost:8000 -> app 1

myapp.localhost:8000 -> app 2

由于域名无法解析,我无法将字符串myapp添加到我的ec2 Public DNS地址中,并无法加载应用程序。

我不想走53号公路。

这可以通过其他方式完成吗?也许通过将主机名添加到ec2主机配置文件中?

如果是,请指出正确的方向。谢谢。

1 个答案:

答案 0 :(得分:0)

从描述中可以看到,您有一个应用程序可以检查HTTP请求中发送的DNS名称,以区分一个应用程序中的两种不同的业务逻辑。从技术上讲,只有一个应用程序,因为您只有一个正在运行的进程监听端口8000。app 1app 2只是应用程序内部的两个不同执行路径。

在本地计算机(在本例中为EC2实例)上,通过更改/etc/hosts文件,可以使localhostmyapp.localhost都指向127.0.0.1 ,这是默认回送网络接口上的IP。这样,您可以使用这两个本地解析的域名在本地访问应用程序。它们将被解析为相同的IP,并以您计算机上的相同运行进程为目标。

如您所见,它是如何在您的计算机上本地工作的,为了实现您的目标,您将需要2个指向相同IP的DNS记录。由于您无法使用Route 53或其他类似服务来创建更多的公共DNS记录以映射到EC2实例的公共IP,因此您将无法为计算机使用第二个DNS名称。

让您的应用程序的业务逻辑依赖于您无法实际控制的DNS名称实际上有点奇怪。我建议您使用HTTP标头或查询参数来解决您的问题。

使用自定义HTTP标头的一种解决方案可以做到:

(For App1)
HTTP GET ec2-x-xxx-xxx-xxx.compute-1.amazonaws.com:8000
Header: X-APP-NAM=app1

(For App2)
HTTP GET ec2-x-xxx-xxx-xxx.compute-1.amazonaws.com:8000
Header: X-APP-NAME=app2

在您的应用中,在检查DNS名称的位置,您可以更改逻辑以改为检查X-APP-NAME HTTP标头值,然后继续执行不同的执行路径(如您所述,使用不同的应用)。因此,您只需要一个DNS名称即可支持2个应用。

希望这对您有所帮助。