關于域名、服務器、IP、網卡與網站之間的關系,如果要梳理清楚,那就要先向你介紹一下WEB工作流程。
WEB工作流程,用戶訪問網站過程中經歷了哪些流程?
用戶打開瀏覽器 -> 輸入域名 -> 回車 -> 網頁內容在用戶瀏覽器上顯示出來。上面的流程是用戶在表象層上的感知,但在技術層上,遠遠不止這些流程,具體流程如下(以下流程也僅僅是精簡流程,技術要做的工作遠不止這些):
用戶打開瀏覽器 -> 輸入域名 -> 回車后,用戶系統本地會對此域名進行解析 -> 找到此域名對應的IP -> 然后定位到要訪問網站的遠程服務器 -> 瀏覽器發送請求(要獲取哪個頁面) -> 遠程服務器接收到請求后,將頁面發送給用戶瀏覽器 -> 用戶瀏覽器解析頁面HTML進行渲染 -> 頁面最終展現在用戶眼前。
關系梳理
服務器(硬件)
服務器做為硬件設備,網站是要部署在服務器之上的,所以少了硬件的支持,就談不上網站。網卡(硬件)
網卡做為電腦上的硬件設備,要上網就離不開網卡,不管是客戶端(用戶的電腦)還是網站服務器,如果少了網卡,聯網這輩子都是不可能的了。IP
有了電腦/服務器、網卡,接入運營商網絡后,網絡運營商就會給你分配一個全世界獨一無二的公網IP,以此來定位客戶端電腦和服務器端。
IP可以理解為人的身份證,在互聯網上代表某臺機器的唯一編碼。域名
問題來了,IP是一串較長的數字,如:61.190.38.59,如果我們要訪問對方電腦,直接輸入IP是可以進行訪問的,但是記起來太費事,所以出現了域名,將域名和IP綁定起來,就能通過很好記憶的域名來反解析出IP,然后找到互聯網上的目標機器。網站(軟件)
網站其實是一套系統,它接收用戶請求然后做出處理,這樣用戶就能得到處理后的結果。
大型網站1個域名對應多個IP如何理解?
網站域名是1個,像百度這類公司服務器成千上萬,總不能用1個域名綁定成千上萬個IP吧,這是怎么做到的呢?
其實是這樣的:
1個域名可以解析到1個特定的IP上,然后這個特定IP的服務器可以將用戶的請求按一定規則分發到N臺服務器上,專業名詞叫“反向代理”。
舉個栗子:
一個集團董事長要干一件事,他會找相關的部門,如技術部,董事長找到技術部總領導,說我要做什么什么,技術部領導接到任務后會進行任務折解,分到技術部不同人員身上,最終將完成結果反饋給董事長即可。此時技術部總領導就充當了“反向代理”的功能,將任務分發出去,他的下屬將此事辦妥后再由他反饋至董事長。
關于你講的數據冗余問題,分布式系統中,數據是存在冗余的。
虛擬主機上多個域名是如何定位到多個網站中的特定一個的?
假設1臺高配服務器,我們利用它搭建200個虛擬主機,那這200個虛擬主機可以綁定200+個域名,每個域名對應1個網站。
具體怎么定位的?
WEB服務器系統(如:Nginx、IIS)上每個網站會綁定對應的域名,這樣雖然200個域名都解析到這同1臺服務器的IP上,但Nginx和IIS上能獲取用戶請求的域名,這樣就能定位到具體的網站上去。
一個公網IP能否對應多個后端主機?
可以的,這就是“反向代理”的作用,1個公網IP解析到某1臺服務器上,然后這臺服務器上配置規則可以將請求分發至后端多臺服務器上。