記錄或 cname

記錄或 cname

我有一個伺服器(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?

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

答案1

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

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

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

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

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

這樣,當有人輸入 www.client.com 時,網址仍然顯示 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關於這個話題。

相關內容