小編的世界 優質文選 主機
字體大小:
2021年6月30日 -
:
蟲蟲搜奇
優質科技領域創作者
要問目前哪個Web服務器最流行,可能大家都會說是Nginx。這個老毛子開發的神器憑借高性能了、友好的配置、優秀的模塊機制,反向代理支持迅速占領市場並走上Web服務器市場的No1. 本文我們就來談談對於開發人員來說Nginx的一些妙用方法。
從這個簡單的配置,我們可以開始構建必要的複雜性。
主動/被動代理配置
如果服務需要以一台服務器為主的主動/被動配置 對於請求處理,將一個後端服務器做備份,配置方法如下:
upstream backend {
server job:10000;
server backup:10000
backup;
}
Backup選項指示,表示nginx將使用該服務器為備用服務器,只有當主服務器(job:10000)不可用時候,才會代理到backup:10000。
默認情況下,服務器在1次連接錯誤或超時後標記為不可用。但是該閾值可以通過max_fails來配置:
upstream backend {
# 主服務器失敗嘗試3次
server job:10000 max_fails=3;
# 備用服務器嘗試失敗次數10
server backup:10000 backup max_fails=10;
}
除了連接錯誤和超時,還可以使用HTTP 狀態碼,比如500,502等來定義不可用狀態。該配置,由
proxy_next_upstream語句定義。
upstream backend {
server job:10000;
server backup:10000 backup;
}
server {
server_name proxy;
listen 8000;
# 在連接錯誤,超時或者http 429(請求超出)的時候時候,跳轉到下一個pstream。
proxy_next_upstream error timeout
http_429;
location / {
proxy_pass http://backend;
}
}
代理K8s服務
如果要代理K8s集群服務,由於其自帶負載均衡配置中應該設置max_fails=0,以免踢掉正常的服務器:
upstream backend {
server cck8s.svc max_fails=0;
}
這樣nginx就不會將 K8s服務標記為不可用。即不會去嘗試做被動健康檢查,直接利用的K8s集群的主動健康檢查。
靈活的路由 map
有時需要根據某些HTTP標頭值路由請求。比如查詢範圍、cookie值或、主機名或者他們的任意組合。這是Nginx最強大的地方,其他同類的代理基本上都做不到這一點。Nginx請求路由的關鍵是ngx_http_map_module。該模塊允許從組合中定義變量帶有正則表達式的變量。假設微服務架構中有3個後端服務來處理不同類型的數據:
返回剛剛收集的最新數據的實時數據服務。
返回舊數據的歷史數據服務。
返回預先計算的數據的聚合數據服務。
這些服務通過相同的接口提供用戶服務,接口形式如下
<date>.cc.api/?report=<report>
現在有幾個用戶用例:
location /v1/api {
proxy_pass http://prod.cc.api.consul/;
}
location /v1/rpc {
proxy_pass http://prod.rpc.service.consul/;
}
}
結論
Nginx 是一個非常通用的工具。
它有豐富的配置語言為開發人員提供不錯的功能。比如具有配置故障轉移的主動/被動負載平衡、靈活的請求路由與Consul DNS 輕松集成等。雖然有些配置比較醜,甚至使用了可怕的正則,但是這也許就是他的魅力所在吧。