• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Nginx簡介

    一、 概念

    Nginx——Ngine X,是一款自由的、開源的、高性能HTTP服務器和反向代理服務器;也是一個IMAP、POP3、SMTP代理服務器;也就是說Nginx本身就可以托管網站(類似于Tomcat一樣),進行Http服務處理,也可以作為反向代理服務器使用。

    Nginx 解決了服務器的C10K(就是在一秒之內連接客戶端的數目為10k即1萬)問題。它的設計不像傳統的服務器那樣使用線程處理請求,而是一個更加高級的機制—事件驅動機制,是一種異步事件驅動結構。

    雖然目前Nginx的份額在市場上只占很少部分,但是其高性能和低消耗內存的結構,使得其越來越普遍,典型的一個應用就是我們可以使用Nginx作為反向代理進行網站的負載均衡器。例如:Wordpress、GitHub等知名的網站都使用到了Nginx。

    注:C10K問題可以參考: 
    http://segmentfault.com/a/1190000000343620

    http://www.csdn.net/article/2013-05-16/2815317-The-Secret-to-10M-Concurrent-Connections

    二、 正向代理和反向代理

    首先,代理服務器一般指局域網內部的機器通過代理服務器發送請求到互聯網上的服務器,代理服務器一般作用在客戶端。例如:GoAgent翻墻軟件。我們的客戶端在進行翻墻操作的時候,我們使用的正是正向代理,通過正向代理的方式,在我們的客戶端運行一個軟件,將我們的HTTP請求轉發到其他不同的服務器端,實現請求的分發。

    這里寫圖片描述

    反向代理服務器作用在服務器端,它在服務器端接收客戶端的請求,然后將請求分發給具體的服務器進行處理,然后再將服務器的相應結果反饋給客戶端。Nginx就是一個反向代理服務器軟件。

    這里寫圖片描述

    從上圖可以看出:客戶端必須設置正向代理服務器,當然前提是要知道正向代理服務器的IP地址,還有代理程序的端口。 
    反向代理正好與正向代理相反,對于客戶端而言代理服務器就像是原始服務器,并且客戶端不需要進行任何特別的設置。客戶端向反向代理的命名空間(name-space)中的內容發送普通請求,接著反向代理將判斷向何處(原始服務器)轉交請求,并將獲得的內容返回給客戶端。

    這里寫圖片描述

    三、服務器的類型:

    1、Web服務器:提供Http的訪問,例如Nginx、Apache、IIS等,雖然Tomcat也能夠實現,但這并不是他的主要功能,而且性能也遠不如專門的Web服務器; 
    2、應用程序服務器:能夠用于應用程序的運行; 
    3、代理服務器:代理服務器通常是客戶端訪問的一種行為,在整個客戶端訪問服務器的過程中有著重要的作用; 
    4、反向代理 
    5、后臺服務器 
    6、CDN緩存服務器:它是緩存服務器的角色,而且是反向代理的應用,在網站部署的時候,他算是一種策略,對于遠距離訪問的解決方案。

    四、 Nginx的特點

      Ø 跨平臺:可以在大多數Unix like 系統編譯運行。而且也有Windows的移植版本。 
      Ø 配置異常簡單:非常的簡單,易上手。 
      Ø 非阻塞、高并發連接:數據復制時,磁盤I/O的第一階段是非阻塞的。官方測試能支持5萬并發連接,實際生產中能跑2~3萬并發連接數(得益于Nginx采用了最新的epoll事件處理模型(消息隊列)。 
      Ø Nginx代理和后端Web服務器間無需長連接; 
      Ø Nginx接收用戶請求是異步的,即先將用戶請求全部接收下來,再一次性發送到后端Web服務器,極大減輕后端Web服務器的壓力。 
      Ø 發送響應報文時,是邊接收來自后端Web服務器的數據,邊發送給客戶端。 
      Ø 網絡依賴性低,理論上只要能夠ping通就可以實施負載均衡,而且可以有效區分內網、外網流量。 
      Ø 支持內置服務器檢測。Nginx能夠根據應用服務器處理頁面返回的狀態碼、超時信息等檢測服務器是否出現故障,并及時返回錯誤的請求重新提交到其它節點上。 
      Ø 采用Master/worker多進程工作模式 
      Ø 此外還有內存消耗小、成本低廉(比F5硬件負載均衡器廉價太多)、節省帶寬、穩定性高等特點。

    五、Nginx的基本功能

    Nginx的功能包括基本HTTP功能和擴展功能。和Apache服務器一樣,Nginx服務器為了提供更多的功能并且能夠有效地擴展這些功能。每一個模塊都提供了一個功能,通過編譯這些功能模塊來實現功能的擴展。

    1、基本HTTP功能

    1. a)提供靜態文件和index文件,處理靜態文件,索引文件以及自動索引,打開文件描述符緩存;
    2. b)使用緩存加速反向代理,反向代理加速(無緩存),簡單的負載均衡和容錯;
    3. c)使用緩存機制加速遠程FastCGI,簡單的負載均衡和容錯;
    4. d)模塊化的結構。過濾器包括gzipping,byte ranges,chunked responses,以及 SSI-filter。在SSI過濾器中,到同一個 proxy 或者 FastCGI 的多個子請求并發處理;
    5. e)支持SSLTLS SNI 支持;
    6. f)IMAP/POP3代理服務功能;
    7. g)使用外部 HTTP 認證服務器重定向用戶到 IMAP/POP3 后端;
    8. h)使用外部 HTTP 認證服務器認證用戶后連接重定向到內部的 SMTP 后端;
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2、其他HTTP功能

    1. a)基于名稱和基于IP的虛擬服務器;
    2. b)支持Keep-alive和管道連接;
    3. c)靈活的配置和重新配置、在線升級的時候不用中斷客戶訪問的處理;
    4. d)訪問日志的格式,緩存日志寫入和快速日志輪循;
    5. e)3xx-5xx錯誤代碼重定向;
    6. f)速度限制
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    六、Nginx的基本模塊

    Nginx的核心模塊包括內核模塊和事件驅動模塊,即:CoreModule和EventsModule;另外還有第三方模塊 HTTP內核模塊,HttpCoreModule,它是Nginx服務器的核心模塊。

    CoreModule和EventsModule模塊的配置相對于HttpCoreModule會少一些,但是它們的配置將會影響系統的性能,而非功能上的差異。

    1、CoreModule用于控制Nginx服務器的基本功能; 
    2、EventsModule用于控制Nginx如何處理連接。該模塊的指令的一些參數會對應用系統的性能產生重要的影響; 
    3、HttpCoreModule提供HTTP訪問Nginx服務器,該模塊是不能缺少的。

    七、 內部進程模型

    這里寫圖片描述

    Nginx是以多進程的方式來工作的,當然Nginx也是支持多線程的方式的,只是我們主流的方式還是多進程的方式,也是Nginx的默認方式。Nginx采用多進程的方式有諸多好處。

    Nginx在啟動后,會有一個master進程和多個worker進程。master進程主要用來管理worker進程,包含:接收來自外界的信號,向各worker進程發送信號,監控 worker進程的運行狀態,當worker進程退出后(異常情況下),會自動重新啟動新的worker進程。而基本的網絡事件,則是放在worker進程中來處理了。多個worker進程之間是對等的,他們同等競爭來自客戶端的請求,各進程互相之間是獨立的。一個請求,只可能在一個worker進程中處理,一個worker進程,不可能處理其它進程的請求。worker進程的個數是可以設置的,一般我們會設置與機器CPU核數一致,這里面的原因與Nginx的進程模型以及事件處理模型是分不開的。

    八、 處理請求

      首先,Nginx在啟動時,會解析配置文件,得到需要監聽的端口與IP地址,然后在Nginx的master進程里面,先初始化好這個監控的socket(創建socket,設置addrreuse等選項,綁定到指定的IP地址端口,再listen),然后再fork(一個現有進程可以調用fork函數創建一個新進程。由fork創建的新進程被稱為子進程 )出多個子進程出來,然后子進程會競爭accept新的連接。 
      此時,客戶端就可以向Nginx發起連接了。當客戶端與Nginx進行三次握手,與Nginx建立好一個連接后,某一個子進程會accept成功,得到這個建立好的連接的socket,然后創建Nginx對連接的封裝,即ngx_connection_t結構體。 
      接著,設置讀寫事件處理函數并添加讀寫事件來與客戶端進行數據的交換。最后,Nginx或客戶端來主動關掉連接,到此,一個連接就壽終正寢了。

    九、 實際應用

    由于Nginx是由俄羅斯人寫的,所以,Nginx 已經在俄羅斯最大的門戶網站── Rambler Media(www.rambler.ru)上運行了3年時間,同時俄羅斯超過20%的虛擬主機平臺采用Nginx作為反向代理服務器。

    在國內,已經有淘寶、新浪博客、新浪播客、網易新聞、六間房、56.com、Discuz!、水木社區、豆瓣、YUPOO、海內、迅雷在線等多家網站使用 Nginx 作為Web服務器或反向代理服務器。

    這里寫圖片描述

    在近期一些項目的開發過程中,主要是使用Nginx和Tomcat來搭建高性能負載均衡集群,即使用Nginx的反向代理功能來實現請求的分發,關于Nginx和Tomcat的組合使用,不在這里重復造輪子,請參考免費文檔: 
    http://download.csdn.net/detail/u010870518/9261395

    版權聲明:本文為jcsyl_mshot原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/jcsyl_mshot/article/details/102745978

    智能推薦

    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.用戶...

    HTML中常用操作關于:頁面跳轉,空格

    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 以上述例子,判斷一個生產出...

    精品国产乱码久久久久久蜜桃不卡