nginx 01-Nginx簡介

Nginx簡介

  • Nginx是一款輕量級的Web服務器、反向代理服務器及電子郵件(IMAP/POP3)代理服務器
  • 其特色是佔有內存少,併發能力強。
  • 代碼徹底用C語言從頭寫成,可移植到許多體系結構和操做系統。
  • Nginx有本身的函數庫,而且除了zlib、pcre和OpenSSL以外,標準模塊只使用系統C庫函數。

Nginx優點

一、IO多路複用epoll

  • 複用指的是複用同一個線程
  • 多個描述符的I/O操做都能在一個線程內併發交替地順序完成
  • IO多路複用的實現方式:select、poll、epoll
    1. select缺點:
      1. 可以監視文件描述符的數量存在最大限制
      2. 線性掃描效率低下
    2. epoll:
      1. 每當FD就緒,採用系統的回調函數之間將fd放入,效率更高
      2. 最大鏈接無限制
  • IO多路複用至關於服務員能服務多個桌子的客戶
    1. select的方式是當一個服務員要服務10個客戶時,其中一個客戶準備好了要點菜了,服務員會將告訴廚師說有一個客戶準備好了要點菜了,而後廚師再過去問這10個客戶誰準備好了要點菜了,找到那個要點菜的客戶後就爲他作菜。
    2. epoll的方式是服務員直接告訴廚師第3個客人準備好了要點菜了,而後廚師直接找到第三個客人去作菜。

二、輕量級

  • 功能模塊少
  • 代碼模塊化

三、CPU親和(affinity)

  • 是一種把CPU核心和Nginx工做進程綁定方式
  • 即把每一個worker進程固定在一個cpu上執行,減小切換cpu的cache miss,得到更好的性能

四、sendfile功能

  • 在傳統的文件傳輸裏面(read/write方式),在實現上實際上是比較複雜的,須要通過屢次上下文的切換。nginx

  • 兩行代碼是傳統的read/write方式進行文件到socket的傳輸。centos

read(file, tmp_buf, len);      
    write(socket, tmp_buf, len);
  • 當須要對一個文件進行傳輸的時候,其具體流程細節以下:
    1. 調用read函數,文件數據被copy到內核緩衝區
    2. read函數返回,文件數據從內核緩衝區copy到用戶緩衝區
    3. write函數調用,將文件數據從用戶緩衝區copy到內核與socket相關的緩衝區。
    4. 數據從socket緩衝區copy到相關協議引擎。

  • 以上細節是傳統read/write方式進行網絡文件傳輸的方式,咱們能夠看到,在這個過程中,文件數據其實是通過了四次copy操做:
硬盤—>內核buf —> 用戶buf —> socket相關緩衝區 —> 協議引擎
  • 而sendfile系統調用則提供了一種減小以上屢次copy,提高文件傳輸性能的方法。Sendfile系統調用是在2.1版本內核時引進的:
sendfile(socket, file, len);
  • 運行流程以下:緩存

    1. sendfile系統調用,文件數據被copy至內核緩衝區
    2. 再從內核緩衝區copy至內核中socket相關的緩衝區
    3. 最後再socket相關的緩衝區copy到協議引擎
  • 相較傳統read/write方式,2.1版本內核引進的sendfile已經減小了內核緩衝區到user緩衝區,再由user緩衝區到socket相關緩衝區的文件copy服務器

  • 而在內核版本2.4以後,文件描述符結果被改變,sendfile實現了更簡單的方式,系統調用方式仍然同樣網絡

  • 細節與2.1版本的不一樣之處在於,當文件數據被複制到內核緩衝區時,再也不將全部數據copy到socket相關的緩衝區,而是僅僅將記錄數據位置和長度相關的數據保存到socket相關的緩存,而實際數據將由DMA模塊直接發送到協議引擎,再次減小了一次copy操做。併發

Nginx安裝(CentOS + yum)

一、編輯yum源

  • Nginx官網提供了三個類型的版本
    1. Mainline version:目前主力在作的版本,能夠說是開發版
    2. Stable version:最新穩定版,生產環境上建議使用的版本
    3. Legacy versions:遺留的老版本的穩定版
cat /etc/yum.repos.d/nginx.repo

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key

二、加載nginx穩定版的yun源

sudo yum-config-manager --enable nginx-stable

三、經過yum直接安裝nginx

sudo yum install nginx

四、查看nginx安裝目錄

[root@nginx ~]# rpm -ql nginx
[root@nginx ~]# nginx -V

五、啓動nginx

[root@nginx ~]# nginx
[root@nginx ~]# curl http://127.0.0.1/
相關文章
相關標籤/搜索