Nginx簡介
Nginx基礎篇
1)Nginx簡介
1.Nginx:engine X ,2002年開始開發,2004年開源,2019年3月11日,Nginx公司被F5 Networks以6.7億美元收購。
2.Nginx 則是免費的、開源的、高性能的HTTP和反向代理服務器、郵件代理服務器、以及TCP/UDP代理服務器 解決C10K問題(10K Connections)。
-
Nginx官網:http://nginx.org
-
Nginx商業版為Nginx Plus:https://www.nginx.com/products/nginx/
3.Nginx的其它的二次發行版:
-
【Tengine】 ☆☆☆☆☆
- 官網 http://tengine.taobao.org/
- 由淘寶網發起的Web服務器項目。它在Nginx的基礎上,針對大訪問量網站的需求,添加了很多高級功能和特性。Tengine的性能和穩定性已經在大型的網站如淘寶網,天貓商城等得到了很好的檢驗。它的最終目標是打造一個高效、穩定、安全、易用的Web平臺,從2011年12月開始,Tengine成為一個開源項目,
-
【OpenResty】
- 官網:http://openresty.org/cn/
- 基于Nginx與Lua語言的高性能Web平臺。
2)Nginx功能
1.Nginx功能介紹
- ①靜態的web資源服務器html,圖片,js,css,txt等靜態資源
- ②結合FastCGI/uWSGI/SCGI等協議反向代理動態資源請求
- ③http/https協議的反向代理
- ④imap4/pop3協議的反向代理
- ⑤tcp/udp協議的請求轉發(反向代理)
2.Nginx基礎特性
-
特性:
- 模塊化設計,較好的擴展性
- 高可靠性
- 支持熱部署:不停機更新配置文件,升級版本,更換日志文件
- 低內存消耗:10000個keep-alive連接模式下的非活動連接,僅需2.5M內存
- event-driven,aio,mmap,sendfile
-
基本功能:
- 靜態資源的web服務器
- http協議反向代理服務器
- pop3/imap4協議反向代理服務器
- FastCGI(LNMP),uWSGI(python)等協議
- 模塊化(非DSO),如zip,SSL模塊
3.和web服務相關的功能
- 虛擬主機(server)
- 支持 keep-alive 和管道連接(利用一個連接做多次請求)
- 訪問日志(支持基于日志緩沖提高其性能)
- url rewirte
- 路徑別名
- 基于IP及用戶的訪問控制
- 支持速率限制及并發數限制
- 重新配置和在線升級而無須中斷客戶的工作進程
3)Nginx的組織結構
1.web請求處理機制
-
1、多進程方式:服務器每接收到一個客戶端請求時,服務器的主進程事先生成的子進程響應客戶端,直到用戶關閉連接,這樣的優勢是處理速度快,各子進程之間相互獨立,但是如果訪問過大會導致服務器資源耗盡而無法提供請求。
-
2、多線程方式:與多進程方式類似,但是每收到一個客戶端請求會有服務進程派生出一個線程來個客戶方進行交互,一個線程的開銷遠遠小于一個進程,因此多線程方式在很大程度減輕了web服務器對系統資源的要求,但是多線程也有自己的缺點,即當多個線程位于同一個進程內工作的時候,可以相互訪問同樣的內存地址空間,所以他們相互影響,另外一旦主進程掛掉則所有子線程都不能工作了,IIS服務器使用了多線程的方式,需要間隔一段時間就重啟一次才能穩定。
2.組織模型
-
Nginx是多進程組織模型,而且是一個由Master主進程和Worker工作進程組成。
其中子進程相互獨立,如果work process1和work process2需要相互通信,需要依靠master process調用 -
主進程(master process)的功能:
①讀取Nginx 配置文件并驗證其有效性和正確性
②建立、綁定和關閉socket連接
③按照配置生成、管理和結束工作進程
④接受外界指令,比如重啟、升級及退出服務器等指令
⑤不中斷服務,實現平滑升級,重啟服務并應用新的配置
⑥開啟日志文件,獲取文件描述符
⑦不中斷服務,實現平滑升級,升級失敗進行回滾處理
⑧編譯和處理perl腳本 -
工作進程(woker process)的功能:
①接受處理客戶的請求
②將請求以此送入各個功能模塊進行處理
③IO調用,獲取響應數據
④與后端服務器通信,接收后端服務器的處理結果
⑤緩存數據,訪問緩存索引,查詢和調用緩存數據
⑥發送請求結果,響應客戶的請求
⑦接收主程序指令,比如重啟、升級和退出等
Nginx緩存:work process的功能
一般會選擇開啟
一般緩存時長:120s
Nginx組織結構圖
3.進程間通信
??工作進程是有主進程生成的,主進程使用fork()函數,在Nginx服務器啟動過程中主進程根據配置文件決定啟動工作進程的數量,然后建立一張全局的工作表用于存放當前未退出的所有的工作進程,主進程生成工作進程后會將新生成的工作進程加入到工作進程表中,并建立一個單向的管道并將其傳遞給工作進程,該管道與普通的管道不同,它是由主進程指向工作進程的單項通道,包含了主進程向工作進程發出的指令、工作進程ID、工作進程在工作進程表中的索引和必要的文件描述符等信息。
??主進程與外界通過信號機制進行通信,當接收到需要處理的信號時,它通過管道向相關的工作進程發送正確的指令,每個工作進程都有能力捕獲管道中的可讀事件,當管道中有可讀事件的時候,工作進程就會從管道中讀取并解析指令,然后采取相應的執行動作,這樣就完成了主進程與工作進程的交互。
-
工作進程之間的通信原理基本上和主進程與工作進程之間的通信是一樣的,只要工作進程之間能夠取得彼此的信息,建立管道即可通信,但是由于工作進程之間是完全隔離的,因此一個進程想要直到另外一個進程的狀態信息就只能通過主進程來設置了。
-
為了實現工作進程之間的交互,主進程在生成工作進程只之后,在工作進程表中進行遍歷,將該新進程的ID以及針對該進程建立的管道句柄傳遞給工作進程中的其他進程,為工作進程之間的通信做準備,當工作進程1向工作進程2發送指令的時候,首先在主進程給它的其他工作進程工作信息中找到2的進程ID,然后將正確的指令寫入指向進程2的管道,工作進程2捕獲到管道中的事件后,解析指令并進行相關操作,這樣就完成了工作進程之間的通信。
4)Nginx模塊介紹:
?? 核心模塊:是Nginx服務器正常運行必不可少的模塊,提供錯誤日志記錄、配置文件解析 、事件驅動機制 、進程管理等核心功能
?? 標準HTTP模塊:提供HTTP協議解析相關的功能,比如:端口配置、網頁編碼設置、HTTP響應頭設置等等
?? 可選HTTP模塊:主要用于擴展標準的HTTP功能,讓Nginx能處理一些特殊的服務,比如:Flash多媒體傳輸 、解析GeoIP請求、網絡傳輸壓縮、安全協議SSL支持等
?? 郵件服務模塊:主要用于支持Nginx的郵件服務,包括對POP3協議、IMAP協議和SMTP協議的支持
?? 第三方模塊:是為了擴展Nginx服務器應用,完成開發者自定義功能,比如:Json支持、Lua支持等
Nginx高度模塊化,但其模塊早期不支持DSO機制;1.9.11版本支持動態裝載和卸載模塊分類:
- 核心模塊:core module
- 標準模塊:
- HTTP 模塊:
ngx_http_*
HTTP Core modules 默認功能
HTTP Optional modules 需編譯時指定 - Mail模塊 ngx_mail_*
- Stream模塊 ngx_stream_*
- 第三方模塊
Nginx模塊圖:
```
智能推薦
Nginx的簡介
Nginx介紹 Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,在BSD-like 協議下發行。其特點是占有內存少,并發能力強,事實上nginx的并發能力在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。 內存: 不到2M 并發能力強: 3-5萬次/秒 理想環境下 /tomcat服務器 150-...
nginx簡介和使用
Nginx 的代名詞就是 “高負載均衡服務器”。 官網地址:http://nginx.org/en/download.html 1 簡介 nginx (“engine x”) 是一個高性能的 HTTP 和 反向代理 服務器,也是一個 IMAP/POP3/SMTP 代理服務器。 Nginx 是由 Igor Sysoev 為俄羅斯訪問量第二的 Rambl...
Nginx簡介---01
反向代理機制 反向代理服務器位于用戶與目標服務器之間,但是對于用戶而言,反向代理服務器就相當于目標服務器,即用戶直接訪問反向代理服務器就可以獲得目標服務器的資源。同時,用戶不需要知道目標服務器的地址,也無須在用戶端作任何設定。反向代理服務器通常可用來作為Web加速,即使用反向代理作為Web服務器的前置機來降低網絡和服務器的負載,提高訪問效率。 概括: 1.位于用戶(客戶端)-服務器之間. 2.用戶...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
猜你喜歡
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...
統計學習方法 - 樸素貝葉斯
引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...