很早以前,我就在想一個問題,為什么在瀏覽器中輸入
www.baidu.com
就能出來百度首頁,這個過程究竟是怎么一回事呢?本文概述的描述此過程。
目錄:
1. 初體驗
2. IP 地址
3. 端口 port
4. nginx 服務器
5. 域名
1. 初體驗
下載 nginx1.12.1 window 64位。下載完成解壓縮,無需安裝,可直接使用。目錄結構如下:
打開 html 目錄,用以下內容替換 index.html 的內容:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>這是我的個人網站</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>千千闕歌</h1>
來日縱是千千闕歌 <br>
飄于遠方我路上 <br>
來日縱是千千晚星 <br>
亮過今晚月亮 <br>
都比不起這宵美麗 <br>
亦絕不可使我更欣賞 <br>
</body>
</html>
打開 conf 目錄修改 nginx.conf 文件。
......
server {
# 修改端口為 3000,默認為 80
listen 3000;
server_name localhost;
........
雙擊 nginx.exe
運行程序。 打開瀏覽器輸入 127.0.0.1:3000
就可以看到剛剛創建的個人網站。
當然,可別以為如此簡單就創建了一個網站。你迫不及待的霸占了坐在你旁邊同事的機器,在他的電腦瀏覽器里也輸入 127.0.0.1:3000
,結果并沒有出現想象中的網頁。這是為什么呢?要解釋這個問題,得先介紹下 IP 和端口的相關常識。
2. IP 地址
以前看過一本黑客小說,里面寫到:“只要知道別人的 IP 地址,就可以入侵別人的電腦”。計算機如果沒有連接網絡,是不會有 IP 地址的,此時任黑客多牛逼,也不可能進入你的計算機。這也是電腦中病毒后第一時間斷網的原因。
- 公網 IP
- 內網 IP
-
127.0.0.1
和localhost
電腦連網,實際上只做了兩件事情:接收別人發來的數據,給別人發送數據。這些數據都是由 0 和 1 組成的二進制的數據,如:1011010100001101......
,你所看到的視頻,文字,網頁等等一切在做網絡中都會轉換為 0 和 1,當然,這部分后面介紹 http 頭信息時會詳細介紹。
既然要接收信息和寄出信息,那么就需要一個地址。每一臺連網的計算機都會有一個 IP 地址。計算機連接公司的網線上網,就使用公司的 IP 地址 IP1,計算機連接家里的網線,就使用家里的 IP 地址 IP2。
不管是公司的 IP 還是家里的 IP,最初都是在相關部門登記過的,直接由相關部門分配的一個地址。這樣的 IP 叫做公網 IP,可以直接在百度中查詢公網 IP 地址。
通常在家里,會安裝一個路由器,然后用你的計算機和移動設備去連接路由器,此時路由器的 IP 是公網 IP,而路由器會自動創建子 IP 分別給你的計算機或者手機使用,由路由器分配的子 IP 就叫做內網 IP。可以通過在 DOS 窗口
敲入 ipconfig
獲取,格式如:192.168.1.101
,其中,前面 192.168.1
是固定格式,最后一位是隨動的。
通常本機 IP 是不固定的。如果你使用公司網絡上網會是一個 IP 地址,而回到家里使用家里的網絡又會是另一個 IP 地址。因此規定 127.0.0.1
或者 localhost
特指本機的 IP。
為什么要分公網 IP 和內網 IP 呢?其實在別人訪問你的計算機時,只會訪問公網 IP 或者是內網 IP 其中一個。如果是連接同一個路由器的其它計算機訪問你的計算機,只能通過內網 IP 訪問,此時通過公網 IP 是無法訪問的,因為你們屬于一個公網 IP 下。這一點在后面介紹 DNS 協議時會詳細介紹。
有了 IP 地址,就可以找到某一臺計算機。如最初在瀏覽器中輸入 127.0.0.1:3000
就找到了當前計算機。那么 3000 又是什么意思呢?下面介紹端口的含義。
3. 端口 port
如果現在一邊在線聽音樂,一邊和朋友聊 qq,那么這個過程是怎樣的呢?
在線聽音樂和聊 qq 都是需要連網的。這一點通過 IP 地址可以做到。以 qq 音樂為例:需要通過互聯網獲取音樂數據然后放到計算機的播放器中進行播放;而 qq 聊天需要連接網絡接收朋友的短消息然后放到消息框中顯示。如何保證這兩個步驟傳輸的數據不會弄錯呢?即音樂數據傳到了 qq 聊天里,qq 聊天數據傳輸到了音樂里?這就涉及到了端口。
如果給 qq 音樂分配一個端口 4000(舉例數字,實際并不是此端口,以下 5000 一樣也是舉例數字),給 qq 聊天分配一個端口 5000,并且規定在網絡中傳輸數據時必須使用 ip:port
的方式作為地址。通過 ip 地址找到指定計算機,通過 port 找到計算機中運行的某一個應用程序,此時就可以準確的將數據傳輸到指定應用程序而不至混淆。
4. nginx 服務器
此時再回過頭來看一看 127.0.0.1:3000
就豁然開朗了。127.0.0.1 是本地計算機的 IP 地址,而 3000 是 nginx 應用程序占用的端口號,這一點在最開始介紹的 conf 目錄中的 nginx.conf 中有設置過。
此時,想要使用你同事的計算機訪問你的網站就很容易了。
- 確定你的 ip 地址。如果你同事和你連接的都是同一個路由器的網絡,那么通過
DOS 窗口
中鍵入ipconfig
查看內網 IP 地址。如果不是連接同一個路由器的網絡,那么通過百度搜索 ip 獲取你的外網 IP 地址。這里假定為內網 ip,地址為:192.168.1.101
。 - 確定在你的計算機上啟動了 nginx 應用程序。應用程序只有被啟動,端口號才會生效。上面設置的端口號為
3000
。 - 在你同事的計算機瀏覽器中輸入
192.168.1.101:3000
。此時應該就可以看到你的網站了。
服務器
:nginx
是一款 Web 服務器應用程序,必須得運行著才能訪問網站。通常所說的 Web 服務器指的就是類似 nginx 這種應用程序,類似的 Web 服務器應用程序還有 tomcat
。
服務器與 Web 服務器
:我將服務器總結為可以通過 ip:port
的方式找到,并且提供相應服務這樣一個應用程序。 如 Nginx 服務器就是通過 ip:port
找到,并且提供網頁服務,讓我們在瀏覽器中可以看到網站。如通常所說的 Linux 服務器,其實就是 Linux 系統上的一個遠程控制應用程序,這個應用程序啟動后默認端口是 22,通過 <ip>:22
就可以連接到遠程控制應用程序,而這個遠程控制應用程序所做的事情就是啟動 Linux 的 shell 終端。
服務器地址
:服務器 nginx 是運行在計算機上的,通過 ip 可以確定計算機位置,通過 port 可以確定 nginx 位置,因此 ip:port
就被稱為服務器地址。此處示例的192.168.1.101:3000
就是本機上 nginx 的服務器地址;
5. 域名
當年一老兄閑著沒事注冊了 360 這個域名,后來 360 公司做大做強之后想要買回這個域名,可是花了一個億人民幣。
看到上面可能還有些疑惑,為什么百度的網址是 www.baidu.com
簡單易記,而咱的網站就是 192.168.1.101:3000
這么一串數字呢?
按 F12 打開控制臺,切換到 Network 選項卡,重新輸入百度地址,可以看到信息如下圖所示。事實上,訪問的 服務器地址
是 115.239.210.27:443
。而 baidu.com
是它的別名,方便記憶,也被叫做 域名
。
域名注冊
:域名需要在 域名注冊機構 上進行注冊,說是注冊,其實就是購買,而且還是按照年限購買的,并不是買一個域名就永久擁有它,這一點與中國房屋占有權 60 年期限有點像。
域名備案
:注冊過域名要進行備案,也就是讓國家網絡部門知道這個域名被誰用了,這過程是實名制的,防止你注冊個域名結果弄個小黃網侵害青少年或干其它違法犯罪的事。建議在 阿里云
或 騰訊云
這樣的廠商購買域名,后期域名備案也是一站式服務,只需填寫信息等待即可。這個過程大概需要 30 天左右。
域名解析
:域名備案成功之后就是域名解析了,將域名與 ip 一一對應。這個過程自己操作不理解的話有點困難。當初第一個域名是在新網買的,以為買了域名在瀏覽器中輸入就有東東,殊不知域名就是個別名,不綁定 ip 卵用也沒,不過剛接觸這個,域名解析也不會搞就浪費了。第二個域名是在騰訊云上買的,解析也很方便,引導信息也很清楚。
nginx 服務器配置
:如果域名解析也完成后,只需將注冊的域名在服務器的配置文件:conf 目錄下的 nginx.conf 文件做相應修改即可。
......
server {
# 修改端口為 3000,默認為 80
listen 3000;
# 服務器域名配置,修改為 dkvirus.com,默認為 localhost
server_name dkvirus.com;
........
此時在瀏覽器中輸入 dkvirus.com:3000
就和輸入 127.0.0.1:3000
是一樣的啦。是不是感覺后面還有個 3000 尾巴很不爽。域名只是 ip 的別名,與端口無關。
http 協議規定,如果端口是 80,那么可以默認不寫。
還是對 conf 目錄下的 nginx.conf 文件做相應修改。
......
server {
# 修改端口為 80,默認為 80
listen 80;
# 服務器域名配置,修改為 dkvirus.com,默認為 localhost
server_name dkvirus.com;
........
重啟 nginx 服務器,此時在瀏覽器中只需要輸入 dkvirus.com
就可以打開網站了。其實應該寫成 dkvirus.com:80
,只不過 80 端口默認可以不寫,于是就變成了 dkvirus.com
。