虛擬主機(jī)是如何做到不同域名都解析到同一個IP?
時間:2024-01-24 03:45:01 | 來源:網(wǎng)站運(yùn)營
時間:2024-01-24 03:45:01 來源:網(wǎng)站運(yùn)營
虛擬主機(jī)是如何做到不同域名都解析到同一個IP?:做域名解析的是可不是虛擬主機(jī),而是dns服務(wù)器。比如你有三個域名:
http://a.b.com;
http://c.d.com,
http://e.f.com,它們對應(yīng)三臺虛擬主機(jī),但是卻共用同一個ip:1.2.3.4。
這時候在dns服務(wù)器上配置這三個域名與ip的映射關(guān)系如下:
a.b.com A 1.2.3.4
c.d.com A 1.2.3.4
e.f.com A 1.2.3.4
可以發(fā)現(xiàn)這三個個域名都映射到同一個ip,也就是實(shí)現(xiàn)了你說的不同域名解析到同一個ip。
仔細(xì)觀察這映射關(guān)系里面都有一個A,這個A是dns里面的術(shù)語A記錄,域名到ip的映射,dns稱之為A記錄。
說完dns部分,再說http部分。
在瀏覽器里面輸入
http://a.b.com或者
http://c.d.com或者
http://e.f.com后,首先會找dns服務(wù)器做解析得到服務(wù)器ip地址1.2.3.4。
可能你會問瀏覽器咋知道dns服務(wù)器是誰?在你網(wǎng)卡上有配置(dhcp拿到或者靜態(tài)配置的)。
上門說到瀏覽器根據(jù)域名拿到了服務(wù)器ip,然后發(fā)起http請求。該http請求包里面有兩個地方注意下。
一個是1.2.3.4作為http請求數(shù)據(jù)包目的ip地址,這樣數(shù)據(jù)包就可以據(jù)此找到服務(wù)器了,說是找到,其實(shí)專業(yè)說法叫路由尋址。
還有一個是域名(三個中的一個,看你輸入哪個就是哪個),會放到http請求數(shù)據(jù)包中http header的host字段。
有了目的ip地址,網(wǎng)絡(luò)就可以把你瀏覽器的http請求包,正確轉(zhuǎn)發(fā)到服務(wù)器。
有了http host字段,當(dāng)http請求包到了服務(wù)器后,服務(wù)器根據(jù)此host值,匹配你在nginx或apache上配置的多個虛擬主機(jī)(server name)。
找到后就繼續(xù)虛擬主機(jī)配置的其他操作,并響應(yīng)請求。如果找不到,也就是http host不匹配虛擬主機(jī)的server name,就走默認(rèn)的虛擬主機(jī)。
如果你的虛擬主機(jī),啟用了ssl,會是怎樣?
在dns完全相同,不過這時候查找虛擬主機(jī)時,不是根據(jù)http host匹配server name。
因?yàn)閔ttp被ssl加密了,服務(wù)器看不到http host內(nèi)容,這時候難道說虛擬主機(jī)就沒用了嗎?肯定不是,怎么做?
當(dāng)你在瀏覽器輸入
https://a.b.com或
https://c.d.com或
https://e.f.com后,記住啊這時候不是http而是https。
瀏覽器會在發(fā)https請求前,先ssl握手(tcp部分省略,因?yàn)閔ttp、https都有tcp三次握手,在這里沒啥區(qū)別)。
ssl握手的第一個包c(diǎn)lient hello,有個字段叫sni就攜帶以上三個域名的一個,當(dāng)ssl client hello到了服務(wù)器后,服務(wù)器根據(jù)此字段的域名去匹配虛擬主機(jī)的server name。
匹配機(jī)制同http,匹配上后,回復(fù)ssl server hello,并且也把該虛擬主機(jī)上配置的server certificate恢復(fù)給瀏覽器。
瀏覽器拿到server hello、server certificate后,繼續(xù)ssl握手直至完成。
在發(fā)https請求,其實(shí)還是http,只是加了密的http,給到服務(wù)器上指定的虛擬主機(jī),然后由此虛擬主機(jī)回復(fù)。
可以發(fā)現(xiàn),此時的https也帶了http host,但是此時的虛擬主機(jī),已經(jīng)定下來了。在查找虛擬主機(jī)時,https包都沒有,http host沒啥作用,它的工作由ssl client hello的sni完成了。