More  

收藏本站

電腦請使用 Ctrl + D 加入最愛
手機請使用 收藏
關閉

小編的世界 優質文選 主機

適用於開發人員的Nginx秘籍


字體大小:
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 輕松集成等。雖然有些配置比較醜,甚至使用了可怕的正則,但是這也許就是他的魅力所在吧。