support stream upstream health check (tcp/udp/http), and provide a http interface to get backend-server status"
該模塊可以為Nginx提供主動式後端服務器健康檢查的功能(檢查類型支持tcp/udp/http )。
git clone https://github.com/zhouchangxun/nginx/nginx.git git clone https://github.com/zhouchangxun/ngx_stream_upstream_check_module.git
cd nginx/; git apply ../ngx_stream_upstream_check_module/nginx-stable-1.12+.patch
./auto/configure --with-stream --add-module=../ngx_stream_upstream_check_module/
make && make install
stream {
upstream tcp - cluster {
# simple round-robin
server 192.168 .0 .1 : 22 ;
server 192.168 .0 . 2 : 22 ;
check interval = 3000 rise = 2 fall = 5 timeout = 5000 default_down = true type = tcp ;
}
upstream udp - cluster {
# simple round-robin
server 192.168 .0 .3 : 53 ;
server 192.168 .0 . 4 : 53 ;
check interval = 3000 rise = 2 fall = 5 timeout = 5000 default_down = true type = udp ;
}
upstream http - cluster {
# simple round-robin
server 192.168 .0 .5 : 80 ;
server 192.168 .0 . 6 : 80 ;
check interval = 3000 rise = 2 fall = 5 timeout = 5000 type = http ;
check_keepalive_requests 100 ;
check_http_send "HEAD / HTTP/1.1 r n Connection: keep-alive r n r n " ;
check_http_expect_alive http_2xx http_3xx ;
}
server {
listen 522 ;
proxy_pass tcp - cluster ;
}
server {
listen 53 ;
proxy_pass udp - cluster ;
}
server {
listen 8080 ;
proxy_pass http - cluster ;
}
}
http {
server {
listen 80 ;
location / status {
l4check_status ;
}
}
}Syntax:
check interval=milliseconds [fall=count] [rise=count] [timeout=milliseconds] [default_down=true|false] [type=tcp|udp|http] [port=check_port]
Default: interval=30000 fall=5 rise=2 timeout=1000 default_down=true type=tcp
Context: stream/upstream
該指令可以打開後端服務器的健康檢查功能。
interval:向後端發送的健康檢查包的間隔。
fall(fall_count): 如果連續失敗次數達到fall_count,服務器就被認為是down。
rise(rise_count): 如果連續成功次數達到rise_count,服務器就被認為是up。
timeout: 後端健康請求的超時時間。
default_down: 設定初始時服務器的狀態,如果是true,就說明默認是down的,如果是false,就是up的。默認值是true,也就是一開始服務器認為是不可用,要等健康檢查包達到一定成功次數以後才會被認為是健康的。
type:健康檢查包的類型,現在支持以下多種類型
port: 指定後端服務器的檢查端口。你可以指定不同於真實服務的後端服務器的端口,比如後端提供的是443端口的應用,你可以去檢查80端口的狀態來判斷後端健康狀況。默認是0,表示跟後端server提供真實服務的端口一樣。
Syntax: check_keepalive_requests request_num
Default: 1
Context: stream/upstream
該指令可以配置一個連接發送的請求數,其默認值為1,表示Nginx完成1次請求後即關閉連接。
Syntax: check_http_send http_packet
Default: "GET / HTTP/1.0rnrn"
Context: stream/upstream
該指令可以配置http健康檢查包發送的請求內容。為了減少傳輸數據量,推薦採用"HEAD"方法。
當採用長連接進行健康檢查時,需在該指令中添加keep-alive請求頭,如:"HEAD / HTTP/1.1rnConnection: keep-alivernrn"。 同時,在採用"GET"方法的情況下,請求uri的size不宜過大,確保可以在1個interval內傳輸完成,否則會被健康檢查模塊視為後端服務器或網絡異常。
Syntax: check_http_expect_alive [ http_2xx | http_3xx | http_4xx | http_5xx ]
Default: http_2xx | http_3xx
Context: stream/upstream
該指令指定HTTP回复的成功狀態,默認認為2XX和3XX的狀態是健康的。
Syntax : check_shm_size size
Default : 1M
Contex : stream
所有的後端服務器健康檢查狀態都存於共享內存中,該指令可以設置共享內存的大小。默認是1M,如果你有1千台以上的服務器並在配置的時候出現了錯誤,就可能需要擴大該內存的大小。
Syntax: l4check_status [html|csv|json]
Default: l4check_status html
Context: http/server/location