nginx web伺服器最主要就是各種模組的工作。
1、從結構上分為核心模組、基礎模組、第三方模組
核心模組:http模組、event模組、mail模組等;
基礎模組:http access模組、http fastcgi模組、http proxy模組和http rewrite模組;
第三方模組:http upstream request hash模組、notice模組和http access key模組、limit_req模組、upstream check module等;
2、從功能上分為handlers(處理器模組)、filters(過濾器模組)、proxies(**模組)
handlers(處理器模組):此類模組直接處理請求,並進行輸出內容和修改headers資訊等操作,handlers處理器模組一般只能有乙個;
filters(過濾器模組):此類模組主要對其他處理器模組輸出的內容進行修改操作,最後由nginx輸出;
proxies(**模組):此類模組是nginx的http upstream之類的模組,這些模組主要與後端一些服務比如fastcgi等進行互動,實現服務**和負載均衡等功能。
nginx由核心和模組組成,其中核心的設計非常微小和簡潔,完成的工作也非常簡單,僅僅通過查詢配置檔案將客戶端的請求對映到乙個location block,而location是nginx配置中的乙個指令,用於匹配訪問的url,而在這個location中所配置的每個指令將會啟動不同的模組去完成相應的工作。
nginx的高併發得益於其採用了epoll模型,與傳統的伺服器程式架構不同,epoll是linux核心2.6以後才出現的,nginx採用epoll模型,非同步非阻塞,而apache採用的是select模型:
select特點:select選擇控制代碼的時候,是遍歷所有控制代碼,也就是說控制代碼有事件響應時,select需要遍歷所有控制代碼才能獲取到哪些控制代碼有事件通知,因此效率是非常低。
epoll特點:epoll對於控制代碼事件的選擇不是遍歷的,是事件響應的,就是控制代碼上事件來就馬上選擇出來,不需要遍歷整個控制代碼鍊錶,因此效率非常高。
nginx預設以80 埠監聽在伺服器上,並且啟動乙個master程序,同時有master程序生產多個工作程序,當瀏覽器發起乙個http連線請求,每個程序都有可能處理這個連線,怎麼做到的呢?怎麼保證同一時刻乙個http請求被乙個工作程序處理呢?
首先每個worker程序都是從master程序fork出來的,在master程序裡面,建立好需要listen的socket(listenfd)之後,會fork處多個worker程序。
所有worker程序的listenfd會在新連線到來時變得可讀,為保證只有乙個程序處理該連線,所有worker程序在註冊listenfd讀事件前搶accept_mutex,搶到互斥鎖的那個程序註冊listenfd讀事件,在讀事件李呼叫accept接受該連線。
當乙個worker程序在accept這個連線之後,就開始讀取請求、解析請求、處理請求,產生資料後,再返回給客戶端,最後才斷開連線,這樣形成乙個完成的請求流程。
nginx web快取配置
1.場景 使用proxy cache快取web靜態內容檔案和通過rewrite偽靜態化後的html整頁面快取。動態內容通過ajax動態獲取,也保持內容一致。2.nginx 配置 a.新增快取檔案儲存路徑 vi etc nginx nginx.conf 注 proxy temp path和proxy ...
Nginx Web服務應用
nginx下面用原始碼安裝nginx tar zxf nginx 1.12.0.tar.gz cd nginx 1.12.0 cd mnt nginx 1.12.0 vim src core nginx.h 隱藏nginx使用的版本號 yum install pcre devel openssl d...
nginx web)應用實踐
錯誤日誌功能 nginx錯誤日誌一般分為 debug info notice warn error crit alert emerg 這幾個級別。一般 執行 warn error crit 這2個級別。預設開啟 crit 級別。建議開啟error。這裡不要把級別調的太低。會產生大量的日誌。消耗磁碟i...