【问题标题】:How to temporarely resolve a name to a localhost port?如何临时将名称解析为 localhost 端口?
【发布时间】:2014-10-02 12:48:03
【问题描述】:

我使用 Rails 开发网站,我一直在寻找一种简单的方法来为我的应用设置动态名称解析。我需要的最终产品是:每次我启动一个 rails 应用程序(通过在我的应用程序文件夹中输入 rails server 时,我想在一个随机端口上运行它,并且如果我在我的浏览器上输入应用程序名称(比如 myapp.dev或其他东西)它解析为正确端口上的本地主机。

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

现在,我能想到的最好的办法是启动一个守护进程,它会跟踪 rails 应用程序的启动时间,注释端口,并在 /etc/host 中使用应用程序名称为其自身添加一个条目。然后,每当它收到请求时,它都会根据名称转发到正确的应用程序。

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

【问题讨论】:

    标签: linux dns localhost resolve


    【解决方案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 请求的 Host 字段,然后类似地在启动应用程序期间, 创建 iptables 规则,它将使用指定主机字段重定向到端口 80 的所有内容 你的 ruby​​ 应用程序端口。最后一个选项是使用 SRV dns 记录,但在您的 情况。但无论如何,您可以尝试所有这些选项,并选择一个最适合 你。

    【讨论】:

    • 感谢您的评论。但是这样我只能同时运行一个应用程序,因为所有应用程序都使用端口 80,对吧?既然您说 DNS 与端口无关,我认为除非按照我的建议使用守护程序,否则没有其他方法,因为浏览器必须对端口 80 执行所有请求。对吧?
    猜你喜欢
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 2013-12-17
    • 2013-04-14
    • 1970-01-01
    相关资源
    最近更新 更多