Nginx是一個高性能的HTTP和反向代理服務器,具備高併發、穩定、支持熱部署等特色。咱們經常使用它來進行負載均衡、反向代理和緩存HTTP請求等。html
Nginx選擇的進程模型和事件模型與前端開發者熟知的nodejs很類似,都是採用異步非阻塞的方式。Nginx在啓動後會開啓一個master進程和多個worker進程。其中惟一的master進程的主要做用是用來管理下面的多個worker進程,它並不參與具體的事件處理過程。而這多個worker進程之間是平等的關係,他們獨立地競爭來自客戶端的請求且同一個請求只能在某一個worker進程中被處理。下面一張圖能夠形象說明:前端
這裏能夠認爲master進程是整個程序的入口,全部的請求都經它手,再分配給下面的worker進程。另外master進程能夠管理worker的狀態,當某個worker進程掛掉後,master進程須要關掉它並重啓一個。node
Nginx的高併發性就得益於這種進程模型。但有些傳統開發者這時就會產生一個疑問:當master手下的worker進程都在工做時,新進來的請求不就沒地方處理了嗎?這樣何來高併發呢?其實這個問題的答案就是異步非阻塞。以往咱們處理一個請求時,須要接受數據,而後進行i/o處理後再返回數據,期間這個i/o操做就佔用了大部分的時間。而Nginx的異步非阻塞方式就是當發生i/o阻塞時,worker進程就去處理其餘沒有阻塞的事件。而這個阻塞完成後再以異步的方式通知到worker進程。至關於準備好的事件源源不斷地進入隊列來等待worker進程處理,而worker進程也能夠節省等待i/o阻塞的時間。nginx
所以,通常推薦nginx設置worker的個數爲CPU的核數,這樣一個CPU對應一個worker進程,不斷地去處理已準備完畢的事件,也不會出現多個進程競爭一個CPU的狀況。後端
瞭解了nginx的原理後,對於不是運維的同窗來講,平時咱們與nginx打交道最多的地方仍是它的配置文件。Nginx的配置系統通常由一個主配置文件nginx.conf和一些額外的輔助配置文件構成,這些配置文件都是純文本形式,位於Nginx安裝目錄的conf目錄下。 Nginx的配置文件由相似於字符串的簡單指令行和配置塊構成。對於簡單配置,指令以分號結尾,由配置指令和參數兩部分組成,例如:api
worker_processes 8
複製代碼
該指令由名爲worker_processes的指令和值爲8的參數組成,表示Nginx要開啓的worker進程個數爲8個。 除了簡單指令外,Nginx配置還包含一些由大括號括起來的複合配置塊。這些配置塊的大括號包起來的地方表示處於必定的做用域中,其中的內容通常也是一行行簡單指令。例如:跨域
http {
charset utf-8;
}
複製代碼
表示所啓用的http服務器使用utf-8編碼。數組
Nginx經常使用的幾個配置塊有:http、server、location、upstream等。這些配置塊能夠按照必定的規則進行相互嵌套,例如若是該http服務支持多個虛擬主機,則http上下文中能夠出現多個server上下文。在平常工做中,只要咱們熟悉了經常使用的配置指令,就能夠實現大部分功能。附上查詢文檔:Nginx中文文檔、nginx.conf中文詳解瀏覽器
做爲前端開發,掌握Nginx的基本使用方式能夠大大增強咱們的開發效率。緩存
location ^~ /api {
proxy_pass https://test.com/;
}
複製代碼
該配置會代理path爲/api開頭的請求,並返回https://test.com/返回的數據。
upstream test {
ip_hash;
server 10.100.100.1;
server 10.100.100.2;
}
location /test {
proxy_pass http://test;
}
複製代碼
該配置表示路徑爲test的請求會根據必定的規則分配給10.100.100.1和10.100.100.2這兩臺服務器。這些規則除了該配置中的ip_hash方式,還有url_hash、指定權重方式等。
location / {
allow 10.100.0.1;
allow 10.100.0.2;
deny all;
}
複製代碼
allow和deny指令採用從上到下優先匹配的方式,一旦匹配到就跳出。該配置表示只容許10.100.100.1和10.100.100.2這兩個ip訪問。
除了以上的幾種經常使用功能,Nginx還能夠實現圖片處理服務、壓縮數據、適配多端環境等功能。並且這些功能只須要熟練使用配置指令便可實現。