Domain-Name-System

記錄或 cname

  • September 25, 2015

我有一個伺服器(Ubuntu + Apache),我們在其中託管一個應用程序,客戶端可以在其中創建自己的子域 - 即基本上是萬用字元子域。

我們有一個客戶想要將他們自己的域 (www.client.com) 指向我們伺服器上他唯一的子域 (client.app.com)。這應該透明地發生,這樣當有人輸入 www.client.com 時,url 仍然顯示 www.client.com,但一切都在 client.app.com 上透明地工作

在他的 DNS 中,他應該創建一個指向我們 IP 地址的 A 記錄,還是一個指向 client.app.com 的 cname?

在這兩種情況下我們需要創建的虛擬主機有什麼不同嗎?

在他的 DNS 中,他應該創建一個指向我們 IP 地址的 A 記錄,還是一個指向 client.app.com 的 cname?

他應該使用指向 client.app.com 的 CNAME。這樣做的原因有很多,但最好的一個可能是因為這意味著如果伺服器的 IP 地址發生更改,需要進行的更改更少:只有 client.app.com 的條目需要更新,其他所有內容都需要更新CNAME 將自動跟隨。

其他原因包括無法擁有與 MX 記錄同名的 A 記錄,正如其他張貼者中提到的那樣;以及主機應該只有一個“真實名稱”(A記錄)的一般理念,指向同一主機的其他記錄應該是別名(CNAME)。當然,當您有一個指向多個 IP 和多個主機的單個 A 記錄時,這種理念就會失效(但客戶端使用 CNAMES 是另一個很好的論據:如果您的服務變得流行,您需要通過負載平衡來擴展它其他提供相同服務的主機,您希望您的客戶從中受益而無需進行任何更改)。(當然,有很多方法可以實現負載平衡和擴展,您可以輕鬆選擇一種與 DNS 無關的方法,但這取決於您的實現。)

在這兩種情況下我們需要創建的虛擬主機有什麼不同嗎?

無論您選擇哪種 DNS 方法,您都需要確保將 apache 配置為接受其他名稱。

這樣當有人輸入 www.client.com 時,url 仍然顯示 www.client.com,但一切都在 client.app.com 上透明地工作

當然,您需要自己瀏覽 apache 文件來確認以下內容,但我可以想到兩種方法來做到這一點:

  1. UseCanonicalName OffServerAlias每個VirtualHost條目內:

UseCanonicalName Off <VirtualHost *:80> ServerName www.client.com ServerAlias client.app.com DocumentRoot /www/client </VirtualHost> 2. 使用多個ServerNameVirtualHost條目:

<VirtualHost *:80> ServerName www.client.com DocumentRoot /www/client </VirtualHost> <VirtualHost *:80> ServerName client.app.com DocumentRoot /www/client </VirtualHost>

請記住,無論使用哪種方法,您都可能必須確保 html 和任何關聯的腳本都在做“正確的事情”,以便為您想要的行為正確生成 URL。

這裡也有很多很好的例子和有趣的討論:http ://httpd.apache.org/docs/2.4/vhosts/mass.html關於這個主題。

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