Apache-2.2

配置 Apache 或 AWS 以支持允許每個客戶擁有自己的域名的 Rails 多租戶應用程序的最佳方法是什麼?

  • August 23, 2014

我正在建構一個允許多租戶的 Rails 3 SaaS 站點。

當客戶註冊時,他們會輸入他們自己的域名,例如,example.com.我需要example.com指向我的 SaaS 應用程序並為他們提供他們的內容。

我的問題如下:

我是否需要為每個使用自己域的客戶創建一個 Apache 虛擬主機?

CNAME 是否有更簡單的方法讓客戶指向我的伺服器的 IP 地址,然後通過一些擷取所有虛擬主機將請求轉發到我的應用程序?

我可以為客戶創建 CNAME 記錄,這樣他們就不必進行任何設置了嗎?

這是一個更適合亞馬遜網路服務的案例嗎?

對我對 dns 的理解的任何幫助、解釋或更正將不勝感激。我是一名開發人員,因此其中的伺服器操作部分有點模糊。

簡短的回答:

阿帕奇:

只需使用通用/萬用字元虛擬主機。使帳戶配置方式更容易。

域名解析:

只允許子域,並讓您的客戶使用他們現有的 DNS 提供商創建一個 CNAME。

AWS:

是否使用 AWS 不會影響手頭問題的答案。

長答案:

關於 Apache vHost 設置:

您有多種虛擬主機設置選項,包括:

,

  • 你已經提到的兩個:

    1. 個人虛擬主機
    2. 一個包羅萬象的虛擬主機並在應用程序級別處理它
  • 其他無數。LavaScornedOven
    ( http://httpd.apache.org/docs/2.2/vhosts/mass.html ) 連結的 Apache 文件是一個很好的資源。你應該如何具體地做到這一點超出了你的問題範圍,我將立即解釋原因。

但是,您選擇哪種類型的 vHost 設置取決於您的前端應用程序和其他因素:

  • 新客戶註冊流程是使用您開發的軟體還是罐頭?
  • 如果是前者,哪種方法最容易在您的註冊過程中實施?
  • 如果是後者,它是否已經提供了在註冊時創建虛擬主機的規定?如果是這樣,請使用軟體附帶的任何內容。
  • 如果非客戶將他的域指向您的 IP,您希望發生什麼?在使用任何類型的“catchall”虛擬主機之前請考慮這一點。
  • 最終,只有您可以確定哪種方法最適合您。

關於DNS設置:

首先,你絕對應該避免的事情:

  • 區域頂點的 CNAME。即,example.com不應該是 CNAME。如果www.example.com是的話也沒關係。

您的選擇:

  • 完全由客戶決定:
    1. 為客戶提供要使用的 IP 地址
    2. 告訴客戶為指向該 IP 的主機名創建 A 記錄
    3. (可選)向客戶提供創建 DNS 記錄的方法。
    4. 優點:
      • 對你來說最簡單,至少是前期。
      • 不需要託管任何人的 DNS
    5. 缺點:
      • 客戶可能無法按照指示進行操作
      • 當/如果您重新編號並且有一個新的 IP 地址時,預計會有大量支持票湧入 - 無論您提前發出多少警告。
  • 讓客戶使用您的 NS 記錄:
    1. 告訴您的客戶通過其註冊商將其域的名稱伺服器更改為您的,或者如果他們正在使用子域,則使用 NS 記錄將該子域委託給您。
    2. (可選)向您的客戶提供如何執行此操作的詳細說明
    3. 確保您的註冊過程自動在您的 DNS 中創建相關區域
    4. 可選擇為您的客戶提供一個界面,以將其他記錄添加到他們的區域,例如 MX 等,或者自動提供它們並託管您客戶的電子郵件……
    5. 優點:
      • 為您的客戶提供最簡單的方法。
      • 避免整個擔心如果您將來必須重新編號會發生什麼
      • 避免整個 CNAME 難題
    6. 缺點:
      • 您現在成為 DNS 託管商和應用託管商
      • 與您的註冊過程的額外集成步驟
  • 只允許客戶使用子域(可能包括 www)
    1. 讓客戶為該子域創建一個 CNAME
    2. (可選)指導客戶如何創建從其裸域到子域的 HTTP 重定向。
    3. 優點:
      • 可能是最簡單的方法。
      • 因為許多其他託管應用程序服務使用這種方法,客戶更有可能熟悉它,因此不太可能把它搞砸。
      • 與 NS 方法一樣,避免了重新編號期間的問題
    4. 缺點:
      • 不允許客戶在您的服務中使用他們的裸域
    5. 我強烈推薦這種方法——唯一的原因是它是客戶通常習慣的。您可能需要根據具體情況考慮允許其他方法。

引用自:https://serverfault.com/questions/620511