1、nginx基本介紹php
傳統上基於進程或者線程模型架構的web服務經過每進程或者每線程處理併發鏈接請求,這勢必毀在網絡和I/O操做時產生阻塞,其另一個必然結果則是對內存和CPU的利用率低下,產生一個新的進程/線程須要事先準備好其運行環境,運行環境包括分配堆內存和棧內存,以及爲其穿件新的執行上下文等,這些操做都是須要佔用CPU,並且過多的進程/線程還會帶來線程抖動或者頻繁的上下文切換,系統性能會所以進一步降低。
在nginx設計的最初階段,nginx主要着眼點就是其高性能以及讀物理計算資源的高密度利用,所以其採用了不一樣的架構模型,受啓發於多種操做系統設計中基於"事件"的高級処理機制,nginx採用了模塊化、事件驅動、異步。單線程以及非阻塞的架構,並大量採用了多路複用以及事件通知機制。在nginx中,鏈接請求由爲數很少的幾個僅包含一個線程的進程worker以高效的迴環(run-loop)機制進行處理,而每一個worker能夠並行處理數千個的併發鏈接以及請求。
若是負載以CPU密集型應用爲主,如SSL或壓縮應用,則worker數應與CPU數相同;
若是負載以I/O密集型爲主,如響應大量內容給客戶端,則worker數應該爲CPU個數的1.5倍或者2倍。
nginx會按需同事運行多個進程:一個主進程master和幾個工做進程worker,配置了緩存時還會有緩存加載器進程cache loader和緩存管理進程cache manager等,全部進程均是僅包一個縣城,並主要經過"共享內存"的機制實現進程間通訊。主進程master以root用戶身份運行,而worker、cache loader和cache manager均以非特權用戶身份運行。
nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server, originally written by Igor Sysoev. For a long time, it has been running on many heavily loaded Russian sites including Yandex, Mail.Ru, VK, and Rambler. According to Netcraft, nginx served or proxied 28.16% busiest sites in August 2016. Here are some of the success stories: Netflix, Wordpress.com, FastMail.FM.
The sources and documentation are distributed under the 2-clause BSD-like license.
Commercial support is available from Nginx, Inc.
nginx的配置有着幾個不一樣的上下文:main,http,server,upstream和location(還有實現郵件服務反向代理的mail),配置語法的格式和定義方式遵循C語言風格,所以支持嵌套,還有邏輯清晰易於建立、閱讀和維護等優點。
nginx的代碼是由一個核心和一系列的模塊組成,核心主要用於提供web server的基本功能,以及web和mail反向代理的功能,還用於啓用網絡協議,建立必要的運行時環境以及確保不一樣的模塊之間平滑地進行交互。不過,大多跟協議相關的功能和某應用特有的功能都是由nginx模塊實現的,這些功能模塊大體能夠分爲事件模塊、階段性處理器、輸出過濾器、變量處理器、協議、upstream和負載均衡等幾個類別,這些共同組成了nginx的http功能,事件模塊主要用於提供獨立OS獨立的(不一樣的操做系統的事件機制有所不一樣)事件通知機制如kqueue或者epoll等,協議模塊則負責實現nginx經過http、tls/ssl、smtp、pop3以及imap與對應的客戶端創建會話。
在nginx內部,進程間的通訊是經過模塊的pipeline或chain實現的,換句話說,每個功能或操做都是由一個模塊來實現,如壓縮、經過fastcgi或者uwsgi協議與upstream服務器通訊,以及memcahed創建會話等。
2、nginx基本特性python
1.基本http服務器特性nginx
①處理靜態文件,索引文件以及自動索引;打開文件描述符緩存web
處理靜態文件、索引文件和自動索引,都是http服務器都要具有的基本功能;後端
一份文件有數據和元數據兩部分,而nginx可以將文件的元數據緩存起來,提升下次訪問的速度;緩存
②使用緩存加速反向代理;簡單的負載均衡和容錯服務器
複雜均衡和容錯機制,可以實現對後端服務器健康檢查,對不健康的後端服務器進行剔除;網絡
③支持遠程執行fastcgi、uwsgi、SCGI和memcached服務的緩存加速支持;支持簡單的負載均衡以及容錯架構
fastcgi是用於支持php的,uwsgi是用於支持python的web框架;併發
memcached是一個集成在nginx中的實現緩存功能的模塊;
④模塊化的架構,過濾器包括gzip壓縮、ranges支持、chunked響應、XSLT,SSI以及圖像縮放,在SSI過濾器中,一個包含多個SSI的頁面。若是經由FastCGI或反向代理處理,可被並行處理
不少站點支持加載縮小的圖片,當用戶須要時點開後再加載分辨率等質量較高的圖片;
例如淘寶,第一次刷新時加載的是縮放後的小圖,點擊後加載高清圖片;
圖片縮放,在必定程度上節約帶寬
⑤支持SSL,TLS SNI
Serving static and index files, autoindexing; open file descriptor cache; Accelerated reverse proxying with caching; load balancing and fault tolerance; Accelerated support with caching of FastCGI, uwsgi, SCGI, and memcached servers; load balancing and fault tolerance; Modular architecture. Filters include gzipping, byte ranges, chunked responses, XSLT, SSI, and image transformation filter. Multiple SSI inclusions within a single page can be processed in parallel if they are handled by proxied or FastCGI/uwsgi/SCGI servers; SSL and TLS SNI support; Support for HTTP/2 with weighted and dependency-based prioritization.
2.其餘http服務器特性
3.郵件代理服務器特性
4.TCP/UDP代理服務器特性
Generic proxying of TCP and UDP;
SSL termination for TCP;
Load balancing and fault tolerance;
Access control based on client address;
Limiting the number of simultaneous connections coming from one address.
5.架構和擴展性
6.測試經過的操做系統和平臺
FreeBSD 3 — 10 / i386; FreeBSD 5 — 10 / amd64;Linux 2.2 — 4 / i386; Linux 2.6 — 4 / amd64; Linux 3 — 4 / armv6l, armv7l, aarch64, ppc64le;Solaris 9 / i386, sun4u; Solaris 10 / i386, amd64, sun4v;AIX 7.1 / powerpc;HP-UX 11.31 / ia64;Mac OS X / ppc, i386;Windows XP, Windows Server 2003.