前言
本篇文章會Nginx得相關概念、安裝使用、官網檔案決議、基于反向代理的負載均衡策略 這幾個點去決議Nginx,保證對Nginx有個大的認識,
簡介
高并發分流
單臺服務器無法滿足當前業務場景下,既然無法滿足,則使用多個服務器進行解決,就是集群產生;怎么樣去分配來的業務請求,這就是如何進行解決高并發分流的問題,出現的負載均衡的框架;
分流限流
、多讀寫少用快取,寫多讀少用緩沖,
分流的技巧、分而治之的思想,因為這個思想才出現了nginx框架的出現,
概述
一個俄國人用 語言撰寫的,開源的高性能的HTTP和反向代理服務軟體,同時也提供
了IMAP/POP3/SMTP服務,Nginx是一款
輕量級的
Web 服務器/
反向代理服務器及
電子郵件(IMAP/POP3)代理服務器,在BSD-like 協議下發行,其特點是占有記憶體少,
并發能力強,事實上nginx的并發能力在同型別的網頁服務器中表現較好,
Nginx主要應用于靜態資源服務,反向代理服務、API服務
- 靜態資源主要借助于服務器本地檔案系統來完成
- 反向代理可以做到 Nginx強大的性能、快取、負載均衡
- API服務通過集成niginx_lua模塊來實作,比如OpenResty就是用niginx和lua集成特性,整合了大量常用的第三方模塊 ,以及js腳本

正向代理 反向代理
正向代理,代表客戶端進行網路或服務訪問,客戶端也就是正常訪問服務器的,但網路是隔絕的,需要一臺服務器作為網關進行代理服務器 ,這里還是需要指定目標訪問服務器
位于客戶端和原始服務器(origin server)之間的服務器,為了從原始服務器取得內容,客戶端向代理發送一個請求并指定目標(原始服務器),然后代理向原始服務器轉交請求并將獲得的內容回傳給客戶端,客戶端才能使用正向代理,
反向代理,代表服務端接收客戶端的請求,服務端的所有資訊都在反向代理服務器中的;反向代理服務器就相當于目標服務器,即用戶直接訪問反向代理服務器就可以獲得目標服務器的資源,同時,用戶不需要知道目標服務器的地址,也無須在用戶端作任何設定,反向代理服務器通常可用來作為Web加速,即使用反向代理作為Web服務器的前置機來降低網路和服務器的負載,提高訪問效率,
選擇Nginx作為分流負載均衡選擇器
在高并發的互聯網行業,硬體負載均衡器、軟體負載均衡器的選擇
開源 BSD
協議
安裝Nginx
windows安裝
nginx: download進入Nginx下載頁面;
選擇
nginx/Windows-xxx.zip
的安裝包下載,
xxx
表示最新的版本
解壓
zip
到你的程式安裝目錄
進入
nginx-xxx
目錄,雙擊
nginx.exe
啟動
Nginx
服務
linux安裝
linux
下面有兩種安裝方式,二進制安裝、通過原始碼編譯安裝,
二進制安裝
# 檢查更新yum依賴
sudo yum install yum-utils
sudo yum install nginx
通過原始碼編譯安裝
通過原始碼編譯安裝,能夠集成一些默認沒有安裝的模塊以及第三方插件,下面我們來編譯一個攜帶
ssl
和 echo模塊的
Nginx
,
yum install -y gcc # GCC編譯器,用來編譯C語言程式
yum install -y gcc-c++ # C++編譯器,用來編譯C++語言程式
yum install -y pcre pcre-devel # Perl庫兼容正則運算式,Nginx的HTTP模塊要靠它來解 析正則運算式
yum install -y zlib zlib-devel # zlib庫,用于對HTTP包的內容做gzip格式的壓縮
yum install -y openssl openssl-devel # OpenSSL開發庫,用于Http的SSL協議,需要原始碼 編譯# 統一執行前面的命令
sudo yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl- devel
Nginx
需要通過
openssl
原始碼庫來進行安裝
ssl
協議,下載
openssl
原始碼,并解壓
wget https://github.com/openssl/openssl/archive/OpenSSL_1_0_2k.tar.gz # 下載 openssl
tar -xzvf OpenSSL_1_0_2k.tar.gz # 解壓openssl
wget https://github.com/openresty/echo-nginx-module/archive/v0.61.tar.gz
tar -xzvf v0.61.tar.gz
配置編譯選項
編譯安裝,通過
confifigure
檔案來操作,用于一些特殊需求、特殊依賴的安裝方式,操作也不是那么難,可以
參考官網
,也可以參考
confifigure
的幫助檔案,
先了解目錄內容,進入
Nginx
目錄,輸入
ls
查看檔案內容如下圖,里面有一個
confifigure
可執行檔案

在當前默認輸入下面命令,就可以看到對應的幫助檔案
./configure --help

--without/--with
命令,它好比我們的
maven
資源管理,在父專案的
pom
中定義好了依賴的資源,子項 目如果需要使用通過參考即可,
confifigure
命令做了大量的
“
幕后
”
作業,包括檢測作業系統內核和已經安裝的軟體,引數的決議,中間目 錄的生成以及根據各種引數生成一些C
原始碼檔案、
Makefifile
檔案等,
執行編譯
sudo make
make
命令根據
confifigure
命令生成的
Makefifile
檔案編譯
Nginx
工程,并生成目標檔案、最終的二進制檔案
安裝
sudo make install
make install
命令根據
confifigure
執行時的引數將
Nginx
部署到指定的安裝目錄,包括相關目錄的建立和 二進制檔案、組態檔的復制,
nginx核心
Nginx常規操作
使用 sudo ./nginx -h 查看 組態檔 組態檔等等,

包括sudo ./nginx -s reload 熱更新組態檔等等,
其他命令,sudo ./nginx -v 查看版本資訊等等,

Nginx的組態檔
Nginx有一個非常強大的組態檔,可以配置應用對應的模塊指令,類似Perl 語法風格,組態檔指令主 要分為兩大塊:簡單指令、塊指令..
簡單的指令由名稱和引陣列成,用空格分隔,以分號 結尾,
塊指令,以大括號'{}'
包圍的一組附加指令,塊指令在大括號內可以有其他指令,則稱為背景關系,
在任意背景關系之外的指令稱為主背景關系, http、 events指令放在主背景關系,
server在http中, location在server中.
動靜分離 靜態資源服務
動靜分離術
也是分離的技術,Web服務中,html、js、圖片、css等靜態資源
態資源放在 webapp目錄下,當靜態資源越 來越大時,一個網頁獲取大量靜態資源時,
影響到web服務的整體性能
通過 nginx將靜態資源獨立部署,減輕web服務的壓力,
動態計算的資料則通過 web服務來獲取,
niginx 通過利用分層、切割 、 動靜進行分離 包括靜態資源進行分離、前后端分離,
通過實作一個靜態資源服務,來學習組態檔指令的使用
啟動 niginx,瀏覽器訪問http://hostname:8080
將某些檔案 不用放到服務器上去,降低服務器壓力
Nginx的配置熱更新
nginx如何做到組態檔熱更新?
nginx中有 worker、 master兩種行程,
master行程負責加載配置、接收命令、監控子行程
worker行程負責處理網路請求
master process 和worker process 兩種行程, 分別做不同的作業,這里自動啟動,全部請求已經都回傳后, 關閉相關 worker行程,如果不保證關閉則會出現服務例外的,
官方檔案
nginx documentation
檔案主要有:首頁、關于、下載頁面、安全、使用檔案、 fap、博客等部分;blog商業資訊,
作為開發人員,主要關注,下載頁面、使用檔案、博客這幾個部分,其中使用
檔案和博客是最為重要的內容,
博客
中涉及一些高級的特性和商業支持,
使用檔案
包含, Nginx常規操作介紹、
功能場景操作、貢獻提交源代碼、 Nginx模塊參考,
常規操作
包含如何編譯安裝 Nginx、初學者指南、管理員指南、 Nginx操作、 Nginx的連接處理事件型別、等資訊,
功能場景配置
一般只有在對應的功能場景下使用配置,例如負載均衡反向代理、 Https服務
在檔案中模塊介紹,包括所有的處理,

Nginx模塊
Nginx
整體設計采用:微核心模塊 插件形式
很多優秀的開源組件都在采用這樣的設計思想,為第三方擴展提供了強大的支撐,
也是
Nginx
受歡迎的原因之一,

核心模塊常用指令
核心功能指令
微核心,包含 user use events,這些核心部分,都比較重要的部分,在官方檔案中存在著,都是塊指令,

http核心指令 要在 其中選擇 對應的核心模塊進行了解,

Location
最常用又最容易弄錯的 Location指令,它可以由
前綴字串
或
正則運算式
定義


這樣進行匹配起來,字符型別的,
Location匹配規則
當一個請求過來時候, location怎么進行匹配?
首先 nginx檢查使用了前綴字串定義的 location指令塊 選中并記住具有最長匹配前綴的
location指令塊 如有 ^~匹配,則不查找正則運算式,使用該location
然后 按照它們在組態檔中的出現順序檢查正則運算式
正則運算式的搜索在第一次匹配時終止,并使用相應的配置
如果未找到與正則運算式的匹配,則使用先前記住的最長匹配前綴位置的配置
最后 還沒有找到? 接盤俠/
實作高并發分流
單臺服務器qps是有限的,提升請求速率;解決辦法采用集群的方式,而分布式集群則需要使用到負載均衡,
Nginx負載均衡
負載均衡涉及的模塊

upstream
http_upstream 模塊定義一組服務,能被proxy_pass指令參考, upstream name{......} 在http指令塊中,定義一組可以進行負載均衡的上游服務器,并給取個 組名,服務可以是不同的埠、 TCP、UNIX域名套接字, 類似socket套接字
通過 upstream,就能為成千上百臺的后端服務集群提供強有力的支撐,反向代理負載均衡功能,
proxy_pass
表示將請求傳遞到另外一個服務,類似正向代理,代理到某個服務上,
nginx負載均衡策略
