如何临时解析名称到localhost端口?

时间:2014-10-02 12:48:03

标签: linux dns localhost resolve

我使用rails开发网站,我正在寻找一种为我的应用程序设置动态名称解析的简单方法。我需要的最终产品是:每次启动rails应用程序时(通过在我的应用程序文件夹中键入rails server,我想在随机端口上运行它,如果我在浏览器上键入应用程序名称(如myapp.dev)或者什么)它解析到正确端口上的localhost。

获取应用名称和生成随机端口的部分不是问题。问题是如何将名称解析为本地端口。 Linux上是否有任何简单的工具可以让我这样做?

现在,我能想到的最好的事情就是启动一个守护进程,跟踪rails应用程序何时启动,注释端口,并在/etc/host中使用应用程序名称添加一个条目。然后,无论何时收到请求,它都会根据名称转发到正确的应用程序。

我无法相信这是最好的方式,因此我们非常感谢您的想法。

1 个答案:

答案 0 :(得分:1)

我不确定我是否正确理解您的问题,但DNS不是关于端口的。通过使用DNS,您可以将名称解析为IP而不是端口,或者从IP解析为名称(RevDNS)。在你的情况下,你要做的是在随机端口上启动应用程序,转发另一个总是相同的端口。

例如:

通过iptables将端口80转发到应用程序的随机端口。然后,您将始终通过端口80进入应用程序。

编辑:我无法将其粘贴到评论中,因为它太长了,所以我在这里给你答案:

你可以创建很多iptables规则,第一个应用程序将在端口80,接下来的81,依此类推。在浏览器中你必须输入:apps.test.com(第一个应用程序),apps.test.com :81(第二个应用程序).​​. 另一个解决方案:如果你想拥有不同的域(冒号后不输入端口),你可以使用代理服务器, 并使用VirtualHost重定向到特定的应用程序。在代理配置中,您可以定义app1.test.com转到端口,例如8888,app2.test.com转到端口8889,然后在启动应用程序期间,您可以创建iptables规则或ssh tunel以将整个流量从端口8888重定向到你的随机端口 红宝石应用。为了不做更复杂的事情,这些端口会很好 你在ruby应用程序中不使用你在代理中配置的。也可以检查,iptables “字符串匹配”选项;匹配HTTP请求的主机字段,然后在启动应用程序期间类似地, 创建iptables规则,它将指定主机字段的所有内容重定向到端口80 你的ruby应用程序端口。最后一个选项是使用SRV dns记录,但它在你的使用中相当无用 情况。但无论如何,您可以使用所有这些选项,并选择最适合的选项 您。