我的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主机配置文件中?
如果是,请指出正确的方向。谢谢。
答案 0 :(得分:0)
从描述中可以看到,您有一个应用程序可以检查HTTP请求中发送的DNS名称,以区分一个应用程序中的两种不同的业务逻辑。从技术上讲,只有一个应用程序,因为您只有一个正在运行的进程监听端口8000。app 1
和app 2
只是应用程序内部的两个不同执行路径。
在本地计算机(在本例中为EC2实例)上,通过更改/etc/hosts
文件,可以使localhost
和myapp.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个应用。
希望这对您有所帮助。