作為一名小前端,隻需要好好寫代碼,至于部署相關的操作,我們通常接觸不到,正所謂專業的人幹專業的事,我們在工作中并不需要去配置,但這并不代表不需要了解,相信大家都多多少少聽過nginx,是以今天就聊聊,還請大家多多支援~
Nginx是什麼?
Nginx
(engine x) 是一個輕量級、高性能的HTTP和反向代理伺服器,同時也是一個通用代理伺服器(TCP/UDP/IMAP/POP3/SMTP),最初由俄羅斯人Igor Sysoev編寫。
簡單的說:
-
是一個擁有高性能HTTP和反向代理伺服器,其特點是Nginx
,占用記憶體少
,并且在現實中,nginx的并發能力要比在同類型的網頁伺服器中表現要好并發能力強
-
專為Nginx
而開發,最重要的要求便是性能優化
,且十分注重效率,有報告nginx能支援高達50000個并發連接配接數性能
正向代理和反向代理
Nginx 是一個反向代理伺服器,那麼反向代理是什麼呢?我們先看看什麼叫做正向代理
正向代理:區域網路中的電腦使用者想要直接通路網絡是不可行的,隻能通過代理伺服器(Server)來通路,這種代理服務就被稱為正向代理。
就好比我們倆在一塊,直接對話即可,但如果我和你分隔兩地,我們要想對話,必須借助一個通訊裝置(如:電話)來溝通,那麼這個通訊裝置就是"代理伺服器",這種行為稱為“正向代理”
那麼反向代理是什麼呢?
反向代理:用戶端無法感覺代理,因為用戶端通路網絡不需要配置,隻要把請求發送到反向代理伺服器,由反向代理伺服器去選擇目标伺服器擷取資料,然後再傳回到用戶端,此時反向代理伺服器和目标伺服器對外就是一個伺服器,暴露的是代理伺服器位址,隐藏了真實伺服器IP位址。
在正向代理中,我向你打電話,你能看到向你打電話的電話号碼,由電話号碼知道是我給你打的,那麼此時我用
虛拟電話
給你打過去,你看到的不再是我的手機号,而是
虛拟号碼
,你便不知道是我給你打的,這種行為變叫做"反向代理"。
在以上述的例子簡單的說下:
- 正向代理:我通過我的手機(proxy Server)去給你打電話,相當于我和我的手機是一個整體,與你的手機(Server)是分開的
- 反向代理:我通過我的手機(proxy Server)通過軟體轉化為虛拟号碼去給你打電話,此時相當于我的手機和你的手機是一個整體,和我是分開的
負載均衡
負載均衡:是高可用網絡基礎架構的關鍵元件,通常用于将工作負載分布到多個伺服器來提高網站、應用、資料庫或其他服務的性能和可靠性。
如果沒有負載均衡,用戶端與服務端的操作通常是:用戶端請求服務端,然後服務端去資料庫查詢資料,将傳回的資料帶給用戶端:
但随着用戶端越來越多,資料,通路量飛速增長,這種情況顯然無法滿足,我們從上圖發現,用戶端的請求和相應都是通過服務端的,那麼我們加大服務端的量,讓多個服務端分擔,是不是就能解決這個問題了呢?
但此時對于用戶端而言,他去通路這個位址就是固定的,才不會去管那個服務端有時間,你隻要給我傳回出資料就OK了,是以我們就需要一個“管理者“,将這些服務端找個老大過來,用戶端直接找老大,再由老大配置設定誰處理誰的資料,進而減輕服務端的壓力,而這個”老大“就是反向代理伺服器,而端口号就是這些服務端的工号。
像這樣,當有15個請求時,反向代理伺服器會平均配置設定給服務端,也就是各處理5個,這個過程就稱之為:負載均衡
動靜分離
當用戶端發起請求時,正常的情況是這樣的:
就好比你去找客服,一般先是先說一大堆官方的話,你問什麼,他都會這麼說,那麼這個就叫靜态資源(可以了解為是html,css)
而回答具體的問題時,每個回答都是不同的,而這些不同的就叫做動态資源(會改變,可以了解為是變量)
在未分離的時候,可以了解為每個客服都要先說出官方的話,在打出具體的回答,這無異加大了客服的工作量,是以為了更好的有效利用客服的時間,我們把這些官方的話分離出來,找個機器人,讓他代替客服去說,這樣就減輕了客服的工作量。
也就是說,我們将動态資源和靜态資源分離出來,交給不同的伺服器去解析,這樣就加快了解析的速度,進而降低由單個伺服器的壓力
安裝 Nginx
關于 nginx 如何安裝,這裡就不做過多的介紹了,感興趣的小夥伴看看這篇文章:【Linux】中如何安裝nginx
這裡讓我們看看一些常用的指令:
- 檢視版本:
./nginx -v
- 啟動:
./nginx
- 關閉:
(推薦) 或./nginx -s stop
./nginx -s quit
- 重新加載nginx配置:
./nginx -s reload
Nginx 的配置檔案
配置檔案分為三個子產品:
- 全局塊:從配置檔案開始到events塊之間,主要是設定一些影響nginx伺服器整體運作的配置指令。(按道理說:并發處理服務的配置時,值越大,可支援的并發處理量越多,但此時會受到硬體、軟體等裝置等的制約)
- events塊:影響nginx伺服器與使用者的網絡連接配接,常用的設定包括是否開啟對多workprocess下的網絡連接配接進行序列化,是否允許同時接收多個網絡連接配接等等
- http塊:如反向代理和負載均衡都在此配置
location 的比對規則
共有四種方式:
location[ = | ~ | ~* | ^~ ] url {
}
複制代碼
-
:=
,用于不含正規表達式的url前,要求字元串與url嚴格比對,完全相等時,才能停止向下搜尋并處理請求精确比對
-
:用于不含正規表達式的url前,要求ngin伺服器找到表示url和字元串比對度最高的location後,立即使用此location處理請求,而不再比對^~
-
:~
,用于表示url包含正規表達式,并且區分大小寫。最佳比對
-
:與~*
一樣,隻是不區分大小寫~
- 如果
包含正規表達式,則不需要url
作為開頭表示 ~
- nginx的比對具有
,一旦比對上就會立馬退出,不再進行向下比對優先順序