Nginx簡介
- Nginx是一款輕量級的Web服務器、反向代理服務器及電子郵件(IMAP/POP3)代理服務器
- 其特色是佔有內存少,併發能力強。
- 代碼徹底用C語言從頭寫成,可移植到許多體系結構和操做系統。
- Nginx有本身的函數庫,而且除了zlib、pcre和OpenSSL以外,標準模塊只使用系統C庫函數。
Nginx優點
一、IO多路複用epoll
- 複用指的是複用同一個線程
- 多個描述符的I/O操做都能在一個線程內併發交替地順序完成
- IO多路複用的實現方式:select、poll、epoll
- select缺點:
- 可以監視文件描述符的數量存在最大限制
- 線性掃描效率低下
- epoll:
- 每當FD就緒,採用系統的回調函數之間將fd放入,效率更高
- 最大鏈接無限制
- IO多路複用至關於服務員能服務多個桌子的客戶
- select的方式是當一個服務員要服務10個客戶時,其中一個客戶準備好了要點菜了,服務員會將告訴廚師說有一個客戶準備好了要點菜了,而後廚師再過去問這10個客戶誰準備好了要點菜了,找到那個要點菜的客戶後就爲他作菜。
- 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);
- 當須要對一個文件進行傳輸的時候,其具體流程細節以下:
- 調用read函數,文件數據被copy到內核緩衝區
- read函數返回,文件數據從內核緩衝區copy到用戶緩衝區
- write函數調用,將文件數據從用戶緩衝區copy到內核與socket相關的緩衝區。
- 數據從socket緩衝區copy到相關協議引擎。
- 以上細節是傳統read/write方式進行網絡文件傳輸的方式,咱們能夠看到,在這個過程中,文件數據其實是通過了四次copy操做:
硬盤—>內核buf —> 用戶buf —> socket相關緩衝區 —> 協議引擎
- 而sendfile系統調用則提供了一種減小以上屢次copy,提高文件傳輸性能的方法。Sendfile系統調用是在2.1版本內核時引進的:
sendfile(socket, file, len);
運行流程以下:緩存
- sendfile系統調用,文件數據被copy至內核緩衝區
- 再從內核緩衝區copy至內核中socket相關的緩衝區
- 最後再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官網提供了三個類型的版本
- Mainline version:目前主力在作的版本,能夠說是開發版
- Stable version:最新穩定版,生產環境上建議使用的版本
- 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/