2016-04-06 48 views
4

使用Node.js/Express我有一個REST API和多個同構/通用應用程序,它們使用此API。Node.js - 每個用戶的子域+允許自定義域

我想讓用戶擁有自己的子域名,並且在註冊時動態發生。

從我研究過的最好的方式來做到這一點是指向同構/通用應用程序服務器的通配符記錄,並有一些邏輯解釋請求查找子域並提供適當的頁面。我假設需要坐在應用程序的前面,並對服務器的每個請求都發生。

這是解決此問題的最佳方法嗎?有其他方法嗎?

是否會有任何可擴展性方面的問題?

然後我想讓用戶擁有一個自定義域。 Tumblr和其他服務提供了類似的功能,允許您將CNAME記錄指向用戶子域。我一直無法找到關於如何工作的很多信息。

允許用戶在應用程序的區域中使用自定義域的最佳方式是什麼?

回答

3

這是解決此問題的最佳方法嗎?有其他方法嗎?

可擴展性是否會有任何潛在問題?

你用通配符DNS描述的是最好的方法,你不會遇到任何由此引起的可伸縮性問題。另一種方法是使用具有API的DNS主機(如Route 53),併爲每個用戶動態添加一個子域。雖然這比通配符有幾個缺點。維護可能會很痛苦,新的DNS記錄可能需要一段時間才能傳播,並且您可能會很快達到限制(在Route 53上,您需要增加限額以超過每個AWS賬戶500個託管區域)。

允許用戶在應用程序中爲其區域使用自定義域的最佳方式是什麼?

與檢查子域(檢查HTTP主機頭)的邏輯一樣。當請求進入時,您可以檢查主機頭並確定該域屬於哪個用戶(無論是子域還是完整的自定義域);只要他們告訴你他們的域名是什麼。添加CNAME是他們的責任(儘管你可以給他們指導,顯然)。

如果您支持HTTPS,您只能在支持SNI的設備上執行此操作。您可以獲得子域名的通配符證書,但是您需要域名所有者上傳PEM文件或獲得他們的許可,並使用Lets Encrypt的api和webroot域驗證檢查。