簡體   English   中英

允許用戶將他們的域名指向我的服務

[英]Allowing users to point their domain names to my service

我通過client.example.com為我的用戶提供服務,並且有類似的頁面

client.mysite.com/blog
client.mysite.com/blog/content/ 
client.mysite.com/docs/ 

等等

我想允許用戶允許他們的域指向這個子域。

因此他們可以在以下 1 個選項中進行選擇:

  client.com -> client.example.com
  sub.client.com -> client.example.com
  client.com/sub/ -> client.example.com

並且頁面應該像

 client.com/blog -> client.example.com/blog
 sub.client.com/blog -> client.example.com/blog
 client.com/sub/blog -> client.example.com/blog

此外,我在 Amazon 中使用 Elastic Beanstalk 來部署我的 React 應用程序和 nginx(Docker 映像)。 在我開始之前,我想知道這是否可能。我也不想給我的客戶提供固定的 IP 地址,以防萬一我丟失了 IP。 blogger.com、wordpress.com等大玩家是怎么做到的?

據我研究,我知道 cname 可以允許客戶端子域,我們需要命名域的 IP 地址。 它沒有提到該文件夾。 對於 SSL,我可以使用 LetsEncrypt。

我對 CloudFlare / Route53 方法之類的方法沒問題。

我已經大規模實施(超過 10,000 個客戶)的最簡單方法是:

  1. 讓您的客戶為特定的 client.example.com 或一般的 clients.example.com 創建 CNAME 記錄。 這適用於根(改為設置 ALIAS 記錄)和子域 -不需要IP 地址,也不推薦,因為它不能擴展。
  2. 創建一個注冊/鏈接的數據庫條目,將其域/子域顯式鏈接到他們的帳戶。
  3. 在后端 controller 中有邏輯將請求中的主機名關聯到特定客戶端(安全措施)以提供相關內容。

以上實現了前兩個用例——它允許客戶端將根域或子域鏈接到您的服務。

要實現第三個用例,您可以允許客戶端指定任意根路徑供您的服務在其中運行。 如果客戶端選擇此選項,您還需要處理重定向到他們在其域中擁有的其他服務。 然而,這對您的應用程序來說是一個很大的責任。

您可以利用他們的注冊商,大多數注冊商都有能力進行路徑重定向——這是最簡單的方法,需要最少的責任/維護。

我還建議有一個選項用於將所有入口點(即:根域、子域、根域+路徑、子域+路徑)重定向到主入口點(即:根域+路徑),以用於 SEO 目的。

注意:如果您的客戶端根域上的 ALIAS 選項不可用,您也可以使用重定向到指定 www 的服務,例如 wwwizer。

參考

https://help.ns1.com/hc/en-us/articles/360017511293-What-is-the-difference-between-CNAME-and-ALIAS-records-

http://wwwizer.com

Cloudflare for SaaS專為此用例而設計。 您只需 go 到 Cloudflare Dashboard > You Domain (example.com) -> SSL -> Custom Hostnames。 添加您的客戶端將鏈接到的主機名,例如ssl.example.com

然后客戶端需要在您的應用程序中添加他或她的自定義主機名,然后通過添加CNAME (指向ssl.example.com )和TXT記錄通過他自己的 ZED5F2BDECBD4BD349D094166 提供程序鏈接並驗證他的自定義域。 驗證和發布新的 SSL 將需要幾分鍾,完全由 Cloudflare 和他們自己處理,您的客戶可以通過自定義主機名訪問您的服務(例如client.comsub.client.com / client.com/blog等)。 )

如果您需要在 HTTP 響應通過客戶的主機名時對其進行操作,也可以通過 CLoudflare Worker 腳本(鏈接到*/* — 所有主機名/URL)路由這些請求。

這是一個示例,說明如何以編程方式創建自定義主機名:

import * as Cloudlfare from "cloudflare-client";

// Initialize custom hostnames client for Cloudlfare
const customHostnames = Cloudflare.customHostnames({
  zoneId: process.env.CLOUDFLARE_ZONE_ID as string,
  accessToken: process.env.CLOUDFLARE_API_TOKEN as string,
});

// Add the client's custom hostname record to Cloudflare
const hostname = "www.client.com";
const record = await customHostnames.create({ hostname });

// Fetch the status of the custom hostname
const status = await customHostnames.get(record.id);
// => { id: "xxx", status: "pending", ... }

參考

我認為您要問的是如何讓客戶擁有自己的域,他們擁有的域,有一個指向您的網站的子域,並以某種方式具有匹配的證書。 但僅從安全的角度來看,沒有安全的方法來執行此 IMO。 以下是我想不到的方法,你可以做到這一點:

您管理子域的 DNS

您的客戶可以為您擁有的公共Route53分發創建 NS 記錄。 然后,該子域實際上就是您的,您可以在其子域中創建 DNS 記錄,並在ACM中創建可在 Cloudfront 分發中使用的證書。 您可以在一個證書中擁有多個FQDN ,因此您不必擁有多個分發版。 您還需要將域添加到您的發行版中的別名。

客戶管理自己的 DNS 但您告訴他們該怎么做

我不確定這是否有效,因為我沒有嘗試過,但是在 ACM 證書的 DNS 驗證中,您可以看到需要創建的記錄,您會告訴客戶他們需要為 AWS 創建的 CNAME 記錄為給定域頒發證書,即sub.client.com ,他們還需要創建 CNAME 以指向您的網站。 這樣,客戶端仍然可以管理自己的 DNS。

進口證書

您可以讓您的客戶為您創建一個證書,然后您可以導入它。 他們還需要創建 CNAME 記錄以指向您的網站。 他們再次需要創建一個 CNAME 來指向您的站點。 可能最不安全,證書需要手動輪換。

雲前

您的客戶可以將您的網站用作他們自己的 Cloudfront Distribution 的來源,雖然有點笨拙,但可以使用。 我認為這不會隨着客戶的增長而擴大。

概括

IMO 我不喜歡這些解決方案中的任何一個,它們都很混亂,很可能不符合安全標准,而且很難實現自動化。 並不是說沒有你可以這樣做的情況。 我建議您為自己的域創建子域,或者以其他方式將自己視為托管公司,然后您將代表他們擁有/管理客戶的域,這樣更容易。 但是 IMO 擁有一個域,然后將控制權交給它,或者轉移證書是沒有意義的。 對於需要持有某些認證或需要您持有這些認證(例如 SOC2)的客戶,您會遇到麻煩。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM