作爲一個輕量級的http服務器,nginx與Apache相比有以下優勢:
1)在功能上,
它佔用很少的系統資源,能支持更多的併發鏈接,達到更高的訪問效率;
2)在功能上,
他是優秀的代理服務器和負載均衡服務器;在安裝配置上,安裝簡單,配置靈活
nginx的模塊與工作原理
nginx由內核和模塊組成,內核的設計非常微小和簡潔,完成的工作也非常簡單,僅僅通過查找配置文件將客戶端請求映射到一個location block,
nginx的模塊從結構上分爲核心模塊,基礎模塊和第三方模塊,http模塊,EVENT模塊和mail模塊屬於核心模塊,http access 模塊,http fastCGI模塊,http proxy模塊和http rewrite模塊屬於基礎模塊,而http upstream request hash 模塊,notice模塊和http access key模塊屬於第三方模塊,用戶根據自己的需要開發的模塊都屬於第三方模塊。正是有臉這麼多的模塊支撐,nginx的功能纔會如此強大
nginx配置文件的結構
nginx的配置文件是一個純文本文件,它一般位於nginx安裝目錄的conf目錄下,整個配置文件是以block的形式組織的,每個block一般以一個大括號“{}”來表示,block可以分爲幾個層次,整個配置文件中main指令位於最高層,在main層下面可以有event,http等層級。而在http層中又包含server層,即server block, server中又可以分爲location層,並且一個server block中可以包含多個location block
nginx配置文件主要分爲4部分,main(全局部分),server(主機部分),upstream(負載均衡服務器設置)和location(url匹配特定位置的設置)。
main部分設置的指令將影響其他所有設置:
server部分的指令主要用於指定主機和端口:
upstream指令主要用於負載均衡,設置一系列的後端服務器;
location部分用於匹配網頁位置,這四者之間的關係如下:
server繼承main,location繼承server, upstream既不會繼承其他設置也不會被繼承
upstream是nginx的http upstream模塊,這個模塊通過一個簡單的調度算法來實現客戶端ip到後端服務器的負載均衡,
nginx的負載均衡模塊目前支持4中調度算法,後兩項屬於第三方調度算法
輪詢 (默認)每個請求按時間順序逐一分配到不同的後端服務器,如果後端某臺服務器down了,故障系統會自動剔除,使用壺訪問不瘦影響
weight 指定輪詢權值,weight值越大,分配到的訪問機率越高,主要用於後端每個服務器性能不均的情況下
ip_hash,每個請求按訪問ip的hash結果分配,這樣來自同一個ip的訪客固定訪問一個後端服務器,有效解決了動態網頁存在的session共享問題
fair 這是比上面兩個更加智能的負載均衡算法 此種算法可以依據頁面大小和加載時間長短智能地進行負載均衡,也就是根據後端服務器的相應時間來分配請求,響應時間段的優先分配,nginx本身不支持fair的,如果需要使用這種調度算法,不許下載nginx的upstream_fair模塊
URL_hash,此方法按訪問URL的hash結果來分配請求,是每個URL定向到同一個後端服務器,可以進一步提高後端緩存服務器的效率,nginx本身不支持url_hash的,要使用要安裝hash軟件包
在http upstream模塊中,可以通過server指令指定後端服務器的ip地址和端口,通時還可以設定每個後端服務器在負載均衡調度中的狀態,常用的狀態有
down,表示當前的server展示不參與負載均衡;
backup,預留的備份機器,當其他所有的非backup機器出現故障或者忙的時候,纔會請求backup機器,因此這臺機器的壓力最輕