背景:以前閒得很,想要本身搭建一個網站,服務器是內網中的一個設備。但因爲是家庭寬帶,沒有公網Ip,80、8080、443等端口也是被封掉的(忽然以爲好可憐),因此使用了花生殼的內網穿透,以後對其的原理產生了好奇,搜索了一些資料、系統化地呈現下來。web
1.普通網站的訪問流程:服務器
用戶輸入域名->DNS服務器查找到服務器對應的Ip->服務器的80端口(或者443,用在HTTPS中)中的軟件監控到了訪問,作出響應。微信
PS:如何在同一臺服務器上部署多個網站?網站
這就涉及到了一個主機頭的概念。參考博文:https://blog.csdn.net/qq578933760/article/details/7707574。實質上就是服務器會讀取用戶請求中關於域名的部分,再轉到對應的網站下。spa
2.部署在內網的服務器(有固定公網Ip、80端口可用時)的訪問流程:.net
用戶輸入域名->DNS服務器查找到網關的ip->網關收到訪問申請,要訪問本身的80端口->根據預先在網關中設置好的端口映射規則,將申請轉發給內網中的服務器(注意,此時是內網通訊,網關使用的是本身的內網Ip)->服務器返回消息,發送給網關的內網ip->網關經過公網ip將消息發送給用戶代理
3.部署在內網的服務器(沒有固定公網ip、80端口不可用時)的訪問流程:blog
這時咱們能夠提出一種設想,若是我租用一臺有固定公網ip、80端口可用的服務器,並將域名綁定到這一服務器對應的ip上,以後設置反向代理,指定網關的公網ip並指定非80端口。同時,雖然沒有固定公網ip,可是咱們能夠設置一個同步流程,每次從新隨機分配公網Ip時,咱們都將這個ip同步到服務器上。流程就會變成:ip
用戶輸入域名->DNS服務器查找到咱們所租用的服務器的ip—>服務器80端口檢測到訪問,反向代理回網關的動態公網ip(指定非80端口),也就是轉發->網關非80端口收到訪問申請->根據預先在網關中設置好的端口映射規則,將申請轉發給內網中的服務器->服務器返回消息,發送給網關的內網ip->網關將內容返回咱們所租用的服務器->服務器返回內容給用戶。部署
實際上,這已經和如今市面上比較流行的內網穿透軟件,例如花生殼,的原理比較接近的。可是花生殼的內網穿透是不須要配置網關的端口映射規則的,這一點是怎麼作到的呢?
4.以花生殼爲例的不須要配置端口映射規則的訪問流程:
*注:這只是本人的推斷,不表明軟件自己真實的原理
和上一步不一樣的是,花生殼使用時要求服務器要一直運行着花生殼的客戶端,而域名也是綁定在花生殼的服務器下的。那麼這實際上就不是單純的web通訊了,用戶發送消息後花生殼的服務器接收到消息,以後就是服務器端和客戶端的通訊,原理和微信電腦端和手機端的相互通訊同樣,因此天然不須要配置端口映射。
固然,不管是花生殼的方式,仍是3中的方式,不只會影響訪問速度,用於轉發的服務器的負載和流量也是不小的。並且速度上和流量上會有限制,並無徹底體現本身搭建服務器的優點。
----------------------------------------------------------------------------------
參考資料: