我查了一下主機商分配給我的共享IP有8百多個網站
我好奇這是怎做到的?
一般如果我們一個IP要分配給多個網站,只能用端口轉發對外連線的表示是這樣
http://xxx.xxx:80
http://xxx.xxx:81
但是bluehost是怎麼做到可以用
http://xxx.xxx 的方式連線到同一個IP上?
這件事呢, 要從 20 年前說起....
當 1996 年 HTTP 1.0 版通訊協定定案時 (RFC-1945), Web Server 軟體跟其他的通訊軟體一樣, 一個軟體, 綁一個通訊 Port. 當時所有軟體都這麼做, 所以 Web Server 這樣做並沒有甚麼不同.
但是後來, 大家漸漸發現, 那幾年下來, Web Server 快速成長, 如果要讓很多台 Web Server 都可以發布, 就必須每一台 Web 給一個 IP. 但當時 Internet 快速起飛, IPv4 卻快速被耗盡, 導致開始出現 IP 不夠用給 Web Server 用的問題.
到了 1999 年 6 月 (也就是 .com 產業泡沫化的那年), HTTP 從 1.0 改版為 1.1 (RFC-2616), 為了改善上述問題, 於是在 1.1 版加入了一個新的功能: 讓瀏覽器可以在 Header 裡面送出主機的名稱, 而 Web Server 收到這個名稱之後, 可以根據名稱, 來決定要回應誰的網頁出去.
這個技術, 叫做: Name Based Virtual Host.
Apache 的 httpd Server 從 1.1 版就開始實做這個技術, 但整個技術成熟, Config 指令設計完整, 到商業化階段, 則是在 1.3 以後的版本. 而且必須搭配較新版可支援 HTTP/1.1 的瀏覽器, 才能達到這個功能.
所以, 當你的:
這三個條件都滿足下, 一個 httpd server 就可以只用一個 IP, 一個 Port, 去服務無限多個不同的 FQDN 名稱, 也就等於是: 只用 1 個 IP, 服務無限多台 Web Server.
自此之後, Proxy, Reverse Proxy, Load Balance...等等技術, 都依循 HTTP/1.1 的規範來設計, 於是乎, 全世界的軟體都可以支援了..
因為是虛擬主機,說的詳細點好了
瀏覽器再送出GET請求時會有標頭,上面載明要哪個網域;虛擬主機可以依據標頭資訊來做處理