網絡服務之Nginx

  在之前一篇博客中我們講述了httpd網絡服務器,那么httpd是個非常穩定安全的一個服務器,這次我們介紹一個新的網絡服務器—-nginx。
  Nginx 是俄羅斯人編寫的十分輕量級的 HTTP 服務器,Nginx,它的發音為“engine X”,是一個高性能的HTTP和反向代理服務器(我們主要圍繞這兩點),同時也是一個 IMAP/POP3/SMTP 代理服務器,還能作為TCP/UDP的反向代理服務器,意味著還能可以完全代理MySQL,Nginx 是由俄羅斯人 Igor Sysoev 為俄羅斯訪問量第二的 Rambler.ru 站點開發的。Igor Sysoev 在建立的項目時,使用基于BSD 許可。

1、httpd與nginx

  自從nginx出現之后,就一路飆升,步步蠶食httpd的市場空間,但是在nginx出現之前httpd是非?;鸬模敲礊槭裁丛趆ttpd非?;鸬臅r候,nginx就出現的呢?這是因為出現了一個叫C10K的問題,所謂的C10K問題就是10K Connections,我們都知道1K=1000,10K就是10000,也就是說,這是httpd的并發瓶頸,最大也就是支持10000的并發請求量,所以nginx這樣一款輕量級的服務器就出來了。
  那么為什么會由這樣的結果呢?原因在于處理的模塊不同,現在http的2.4版本共有三種模塊,分別是:

prefork:進程模型,兩級結構,主進程master負責生成與銷毀子進程以及接收請求報文,每個子進程worker負責響應一個請求。
worker:線程模型,三級結構,主進程master負責生成與銷毀子進程并接收請求報文,而每個子進程worker負責生出多個線程,每個線程處理一個請求。
event:進程模型,兩級結構,主進程master生成并銷毀子進程以及接收請求,而子進程worker可處理多個請求并與之響應。

  當時的httpd采用就是前兩種類型,worker模式線程與進程的等級是差不多,在性能方面上提高不了多少,而event也是近幾年才有的模型。

2、Nginx設計架構

  Nginx在兩級結構的設計上,一種是master,另一個worker進程,后者可生成多個,master本身不響應用戶的請求,只負責生成監控worker進程,以及加載配置文件的管理,平滑升級,負責應用配置文件并應用新配置,用戶的請求報文通常是由master來接收。
  worker進程是直接用來處理請求的,每個worker可以處理多個用戶請求,worker的生成應小于CPU的核心數,而處理的請求完成IO調用時,利用epoll等多路IO,還包含sendfile機制,mmap內存映射,所以特點是基于事件驅動,異步,非阻塞。
再由master進程將請求報文發送給worker直接處理請求,同時還有緩存相關的進程,一個是cache loader叫做載入緩存對象,另一種是cache manager叫做管理緩存對象。

網絡服務之Nginx

3、I/O模型

  無論nginx和httpd都會發起系統調用運行I/O加載資源處理請求完成IO調用時響應客戶端,同時還要記錄日志,那么如何加載、如何調用?
  I/O模型共分為以下幾類:阻塞型、非阻塞型、復用型、信號驅動型、異步
  我們進行一次IO請求都會由兩個階段組成,第一步就是等待數據,就是將數據從磁盤復制到內核內存當中,第二部就是復制數據,即將數據從內核內存當中復制到進程內存中。
  首先我們來說一下關于同步和異步,區分調用者與被調用者的關系。

網絡服務之Nginx

3.1、同步、異步調用

  同步和異步關注的就是消息的推送通知機制,同步是程序調用者發起IO調用,IO則就成為了被調用者,那調用者處于等待狀態,要等待被調用者調用完成之后,返回一個成功的一個消息,而后調用者才能將程序繼續執行下去。
異步就是調用者發起IO調用,IO成為被調用者,只不過就是調用者不會處于等待狀態,而調用者可以去執行其它任務,當被調用者調用完成之后,通過狀態、通知或回調機制通知調用者被調用者的運行狀態。

3.2、阻塞、非阻塞

  阻塞與非阻塞關注的就是調用者在等待結果返回之前所處的狀態是什么樣的,阻塞狀態就是調用結果返回之前,調用者是處于一個掛起狀態;而非阻塞就是調用結果返回之前,調用者是不會被掛起的。
(圖)

4、Nginx特性

  Nginx作為http服務器來說,有以下幾種特性:
  1、它是靜態的web資源服務器,處理靜態文件(如:可做成圖片服務器,或js/css/html/txt等靜態資源服務器)。
  2、結合FastCGI/uwSGI/SCGI等協議反代動態資源的請求,能夠實現簡單的負載和容錯。
  3、能夠進行http和https協議的反向代理,說明支持SSL和TLSSNI。
  4、支持imap4/pop3協議的反向代理。
  5、支持tcp/udp的轉發。
  6、Nginx轉為性能優化而開發,性能是其最重要的考量,實現上非常注重效率,支持Poll模型,對高負載來說是沒有問題的。
  7、支持熱部署
  8、采用master-slave模型,充分利用SMP優勢,減少在磁盤上的IO阻塞延遲,當采用select()/poll()調用時,還可以限制每個進程的連接數。

5、Nginx安裝配置

  Nginx提供無非就常用的兩種方法,一種是RPM,另一種是源碼包的安裝,其Nginx的官方站點為:nginx.org那么官方的預制包站在http://nginx.org/packages/centos/7/x86_64/RPMS/。
  對于RPM包來說,這個包基本沒有什么依賴性,不過要在絕對路徑下,因此可以直接使用rpm命令安裝也可以,或者使用yum。

# rpm -ivh ./nginx-1.10.2-1.el7.ngx.x86_64.rpm
# yum -y install nginx

  以上就是RPM包安裝的方式,還有一種是編譯安裝,不過我們要先使用yum命令安裝開發套件以及nginx所依賴的庫和輔助包。

# yum -y groupinstall 'Development Tools'  'system platform server'
# yum -y install openssl-devel pcre-devel

  以上的包安裝完成之后,就可以開始編譯了

# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_stub_status_module --with-threads --with-file-aio
# make && make install

  安裝完成之后在客戶端打開瀏覽器輸入在地址欄上輸入ip:port就可以看到你想要的結果了

原創文章,作者:劉 祥宇,如若轉載,請注明出處:http://www.www58058.com/70290

(0)
劉 祥宇劉 祥宇
上一篇 2017-06-07 21:09
下一篇 2017-06-08 15:02

相關推薦

  • 用戶和組

    3A安全介紹 資源分派: Authentication:認證 Authorization:授權 Accouting|Audition:審計 安全上下文 Linux安全上下文 運行中的程序:進程 (process) 以進程發起者的身份運行: root: /bin/cat mage: /bin/cat 進程所能夠訪問資源的權限取決于進程的運行者的身份 用戶use…

    Linux干貨 2016-08-08
  • Redis 3.0.0正式版發布,全新的分布式高可用數據庫

    Redis 3.0.0 正式版終于到來了!最重要的新特性是集群(Redis Cluster),提供Redis功能子集(比如不支持多數據庫)的分布式、容錯的實現(最多支持1000結點)。   Salvatore 'antirez' Sanfilippo在Google Groups里表示,這是Redis的重要時刻?!拔蚁嘈沤裉斓腞edis 3.0…

    Linux干貨 2015-04-03
  • CentOS6+ LAMP+ wordpress 搭建個人博客站

        每個IT工程師都期待擁有一個自己的博客站,本文講述在CentOS 6系統LAMP環境下使用WordPress框架構建個人博客站的詳細過程。     —-構建LAMP環境—- 1,安裝apache,mysql php yum install -y httpd mysql…

    2017-07-11
  • mysql知識系列–東西比較全

     A。結構化查詢語言(structured query language) B。SQL語句分類  -在MySql數據庫中,SQL語句主要可以劃分以下幾類:  ——DDL(data definition language):數據定義語言,定義對數據庫對象(庫、表、列、索引)的操作  -create,drop,alter,…

    Linux干貨 2017-02-14
  • windows server 2008 r2 每隔一段時間自動關機

    首先來說一下我的狗血經歷:     話說作為一個地鐵汪,每天背著電腦從房山到朝陽那簡直就是能累死我的節奏,所以我跟公司申請我不要用自己的筆記本了(補助我不要了)。最后公司把一臺不用的server 2008r2給我用,12G內存,志強CPU,跑虛擬機杠杠的。 但是噩夢開始了,我發現一個特點,這臺server 2008 r…

    2015-11-26
  • corosync v2+pacemaker實現mariadb的高可用

    高可用mariadb拓撲圖 一、設計前提 1、時間同步 # ntpdate 172.16.0.1 或者 # chronyc sources 2、所有的主機對應的IP地址解析可以正常工作, 主機名要與命令#uname -n 所得的結果一致 因此,/etc/hosts中的內容為以下內容 ????????172.16.23.10?node1.rj.com?node…

    2017-11-02
欧美性久久久久