Nginx配置之負載均衡、限流、快取、黑名單和灰度釋出
一、Nginx安裝(基於CentOS 6.5)
1.yum命令安裝
yum install nginx –y
(若不能安裝,執行命令yum install epel-release)
2. 啟動、停止和重啟
service nginx start
service nginx stop
service nginx restart
瀏覽器中 輸入伺服器的 ip 地址,即可看到相應資訊
3. 其他資訊
rpm -ql nginx 來檢視安裝路徑
yum remove nginx 來解除安裝
nginx -s reload 配置熱更新
二、Nginx負載均衡配置(/etc/nginx/nginx.conf)
- 負載均衡配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
proxy_pass http: //real_server ;
|
2.失敗重試配置
1 2 3 4 |
|
意思是在fail_timeout時間內失敗了max_fails次請求後,則認為該上游伺服器不可用,然後將該服務地址踢除掉。fail_timeout時間後會再次將該伺服器加入存活列表,進行重試。
三、Nginx限流配置
- 配置引數
limit_req_zone指令設定引數
1 |
|
1)limit_req_zone定義在http塊中,$binary_remote_addr表示儲存客戶端IP地址的二進位制形式。
2)Zone定義IP狀態及URL訪問頻率的共享記憶體區域。zone=keyword標識區域的名字,以及冒號後面跟區域大小。16000個IP地址的狀態資訊約1MB,所以示例中區域可以儲存160000個IP地址。
3)Rate定義最大請求速率。示例中速率不能超過每秒10個請求。
2.設定限流
1 2 3 4 |
|
burst排隊大小,nodelay不限制單個請求間的時間
3.不限流白名單
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
上述配置中,192.168.2.0/24網段的IP訪問是不限流的,其他限流。
IP後面的數字含義:
24表示子網掩碼:255.255.255.0
16表示子網掩碼:255.255.0.0
8表示子網掩碼:255.0.0.0
四、Nginx快取配置
- 瀏覽器快取
靜態資源快取用expire
1 2 3 |
|
Response Header中添加了Expires和Cache-Control
靜態資源包括(一般快取)
1)普通不變的影象,如logo,圖示等
2)js、css靜態檔案
3)可下載的內容,媒體檔案
協商快取(add_header ETag/Last-Modified value)
1)HTML檔案
2)經常替換的圖片
3)經常修改的js、css檔案
4)基本不變的API介面
不需要快取
1)使用者隱私等敏感資料
2)經常改變的api資料介面
2.代理層快取
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
在本地磁碟建立一個檔案目錄,根據設定,將請求的資源以K-V形式快取在此目錄當中,KEY需要自己定義(這裡用的是url的hash值),同時可以根據需要指定某內容的快取時長,比如狀態碼為200快取10分鐘,狀態碼為301,302的快取5分鐘,其他所有內容快取1分鐘等等。
可以通過purger的功能清理快取。
AB測試/個性化需求時應禁用掉瀏覽器快取。
五、Nginx黑名單
1.一般配置
1 2 3 4 5 6 7 |
|
2. Lua+Redis動態黑名單(OpenResty)
1)安裝執行
1 2 3 4 5 6 7 8 |
|
2) 配置(/usr/local/openresty/nginx/conf/nginx.conf)
1 2 3 4 5 6 7 8 9 10 |
|
lua指令碼(ip_blacklist.lua)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
|
六、Nginx灰度釋出
- 根據Cookie實現灰度釋出
根據Cookie查詢version值,如果該version值為v1轉發到host1,為v2轉發到host2,都不匹配的情況下轉發預設。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|
2. 根據來路IP實現灰度釋出
1 2 3 4 5 6 7 8 9 |
|
3. 更細粒度灰度釋出
可用lua指令碼實現,參考開源專案:https://github.com/CNSRE/ABTestingGateway