如何將 2 個不同的域指向 1 個 IP 地址(Apache)?
我有兩個不同的域名,我想將它們託管在我擁有的同一個私人主機上。我希望它們指向相同的 IP 地址,但具有不同的內容(當然)。我怎樣才能做到這一點?有不同的方法可以做到這一點嗎?在那種情況下,最好的方法是什麼。謝謝。
您可能想要使用 Apache 的虛擬主機。這是一種在單個 IP 地址上託管多個域的良好支持方法。
http://httpd.apache.org/docs/2.2/vhosts/
具體來說,基於名稱的虛擬主機:http ://httpd.apache.org/docs/2.2/vhosts/name-based.html
Apache2 支持根據域名提供不同的內容,即使所有這些域都解析為相同的 IP 地址。每個域名都由一個虛擬主機處理,因此稱為基於名稱的虛擬主機。
這是兩個域的範例配置:
NameVirtualHost *:80 <VirtualHost *:80> ServerName www.yourfirstdomain.tld DocumentRoot /www/yourfirstdomain.tld/ </VirtualHost> <VirtualHost *:80> ServerName www.yourseconddomain.tld DocumentRoot /www/yourseconddomain.tld/ </VirtualHost>
您將在此處找到有關基於名稱的虛擬主機支持的官方文件。
但是,請注意,這僅適用於普通 HTTP 連接,不適用於 HTTPS(基於 SSL 的 HTTP):基於名稱的虛擬主機依賴於知道請求的名稱,但在加密 SSL 之前,Apache 無法知道此資訊連接建立。
如果您的設置也需要使用 HTTPS,則需要依賴 SSL 協議的擴展,稱為伺服器名稱指示(SNI) ( RFC4366 )。基本上,啟用 SNI 的客戶端(例如:Web 瀏覽器)在建立加密的 SSL 連接時會添加額外的純文字資訊,從而允許伺服器在 SSL 連接準備好之前知道所請求的名稱。
所有瀏覽器尚不支持 SNI。在撰寫本文時,根據維基百科,這些是:
- Internet Explorer 7 或更高版本,Windows Vista 或更高版本(不適用於 XP,甚至 IE 8)
- Mozilla Firefox 2.0 或更高版本
- Opera 8.0 或更高版本(必須啟用 TLS 1.1 協議)
- Android 上的 Opera Mobile 至少 10.1 測試版
- Google Chrome(Vista 或更高版本,Chrome 6 或更高版本上的 XP,Chrome 5.0.342.1 或更高版本上的 OS X 10.5.7 或更高版本)
- Safari 2.1 或更高版本(Mac OS X 10.5.6 或更高版本和 Windows Vista 或更高版本)
- Konqueror/KDE 4.7 或更高版本
- Apple iOS 4.0 或更高版本中的 MobileSafari
- Honeycomb (v3.x) 或更新版本上的 Android 預設瀏覽器
- 視窗電話 7
- Maemo 上的 MicroB
託管多個可通過 HTTPS 訪問的基於名稱的虛擬主機需要您啟用 mod_ssl 並添加與上例類似的配置:
Listen 443 NameVirtualHost *:443 # Accept connections for these vhosts from non-SNI clients # Clients without SNI will be handled by the first defined vhost. # If you only want SNI-enabled client, put on instead SSLStrictSNIVHostCheck off <VirtualHost *:443> ServerName www.yourfirstdomain.tld DocumentRoot /www/yourfirstdomain.tld/ </VirtualHost> <VirtualHost *:443> ServerName www.yourseconddomain.tld DocumentRoot /www/yourseconddomain.tld/ </VirtualHost>
請記住,使用 SSL 需要您為您的域購買 SSL 證書 - 或生成一些自動簽名的證書,並將 Apache 配置為使用它們進行 SSL 連接。