2014-10-02 49 views
1

我使用rails開發網站,我正在尋找一種簡單的方法爲我的應用程序設置動態名稱解析。我需要的最終產品是:每次啓動一個Rails應用程序(通過在我的應用程序文件夾上輸入rails server,我想在隨機端口上運行它,並且如果我在瀏覽器上鍵入應用程序名稱(如myapp.dev或者其他的東西)它解析到正確的端口上的本地主機如何臨時解析名稱到本地端口?

獲取應用程序名稱和生成一個隨機端口的部分不是問題,問題是如何解析名稱到本地端口。在Linux上的簡單工具,允許我這樣做?

現在,我能想到的最好的方法是啓動一個守護程序,用於跟蹤啓動Rails應用程序的時間,爲端口添加註釋並向其中添加條目/etc/host與應用程序名稱。然後,每當它收到請求,它轉發到正確的應用程序ba sed的名字。

我不能相信這是最好的方式,所以想法是高度讚賞。

回答

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記錄,但在你的 的情況下它沒用。但無論如何,你可以玩所有這些選項,並選擇一個最適合你的選項 。

+0

感謝您的評論。但是這樣我只能有一個應用程序同時運行,因爲所有應用程序都使用端口80,對吧?既然你說DNS不是關於端口的,我認爲除非像我建議的那樣使用deamon,否則就沒有其他辦法了,因爲瀏覽器必須對80端口做所有請求。對吧? – fotanus 2014-10-02 22:35:19