Nginx http運行狀況健康檢查配置過程解析
被動檢查
對于被動健康檢查,NGINX 和 NGINX Plus 會在事件發(fā)生時對其進行監(jiān)控,并嘗試恢復(fù)失敗的連接。如果仍然無法恢復(fù)正常,NGINX 開源版和 NGINX Plus 會將服務(wù)器標記為不可用,并暫時停止向其發(fā)送請求,直到它再次標記為活動狀態(tài)。
上游服務(wù)器標記為不可用的條件是為每個上游服務(wù)器定義的,其中包含塊中 server 指令的參數(shù) upstream:
- fail_timeout - 設(shè)置服務(wù)器標記為不可用時必須進行多次失敗嘗試的時間,以及服務(wù)器標記為不可用的時間(默認為 10 秒)。
- max_fails - 設(shè)置在 fail_timeout 服務(wù)器標記為不可用期間必須發(fā)生的失敗嘗試次數(shù)(默認為 1 次嘗試)。 在以下示例中,如果 NGINX 未能在 30 秒內(nèi)向服務(wù)器發(fā)送請求或未收到響應(yīng) 3 次,則表示服務(wù)器在 30 秒內(nèi)不可用:
upstream backend {
server backend1.example.com;
server backend2.example.com max_fails=3 fail_timeout=30s;
}
需要注意的是如果只有一個單一的服務(wù)器組中,將 fail_timeout 和 max_fails 參數(shù)被忽略,服務(wù)器永遠不會標記為不可用。
服務(wù)器慢啟動
最近恢復(fù)的服務(wù)器很容易被連接淹沒,這可能導(dǎo)致服務(wù)器再次被標記為不可用。慢啟動允許上游服務(wù)器在恢復(fù)或變得可用之后逐漸將其權(quán)重從零恢復(fù)到其標稱值。這可以指定 upstream 的 server 模塊的 slow_start 參數(shù)來完成:
upstream backend {
server backend1.example.com slow_start=30s;
server backend2.example.com;
server 192.0.0.1 backup;
}
注意:如果組中只有一臺服務(wù)器,則 slow_start 參數(shù)將被忽略,而服務(wù)器永遠不會被標記位不可用狀態(tài)。慢啟動是 NGINX Plus 的專有功能
NGINX Plus的主動檢查
NGINX Plus 可以通過向每個服務(wù)器發(fā)送特殊的健康檢查請求并驗證正確的響應(yīng)來定期檢查上游服務(wù)器的運行狀況。
要啟用活動運行狀況檢查:
1.在 location 區(qū)塊將 requests(proxy_pass)傳遞給上游組的過程中,包含 health_check 指令:
server {
location / {
proxy_pass http://backend;
health_check;
}
}
此代碼段定義了一個服務(wù)器,它將所有請求匹配到 location / 傳遞給調(diào)用的上游組 backend。它還使用該 health_check 指令啟用高級運行狀況監(jiān)視:默認情況下,NGINX Plus 每五秒向組中的每個服務(wù)器發(fā)送一個 “/” 請求 backend。
如果任何通信錯誤或發(fā)生超時(在服務(wù)器返回的狀態(tài)碼超出 200- 399的范圍)的健康檢查失敗。服務(wù)器被標記為不健康,并且 NGINX Plus 在再次通過運行狀況檢查之前不會向其發(fā)送客戶端請求。
另一個可選項:您可以指定另一個用于運行狀況檢查的端口,例如,用于監(jiān)視同一主機上的許多服務(wù)的運行狀況。使用指令的 port 參數(shù)指定新端口 health_check:
server {
location / {
proxy_pass http://backend;
health_check port=8080;
}
}
2.在上游服務(wù)器組,使用 zone 指令定義一個共享內(nèi)存區(qū)域:
http {
upstream backend {
zone backend 64k;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
server backend4.example.com;
}
}
該區(qū)域在所有工作進程之間共享,并存儲上游組的配置。這使工作進程能夠使用同一組計數(shù)器來跟蹤組中服務(wù)器的響應(yīng)。
可以使用 health_check 指令的參數(shù)覆蓋活動運行狀況檢查的默認值:
location / {
proxy_pass http://backend;
health_check interval=10 fails=3 passes=2;
}
此處,該 interval 參數(shù)將運行狀況檢查之間的延遲從默認的 5 秒增加到 10 秒。該 fails 參數(shù)要求服務(wù)器三次運行狀況檢查失敗時,以將其標記為運行狀況不佳(從默認值開始)。最后,passes 參數(shù)意味著服務(wù)器必須通過兩次連續(xù)檢查才能再次標記為健康,而不是默認值。
指定請求的URL
在 health_check 指令中指定 uri 參數(shù)來設(shè)置健康檢查請求的路由:
location / {
proxy_pass http://backend;
health_check uri=/some/path;
}
指定的 URI 將附加到為 upstream 塊中的服務(wù)器設(shè)置的服務(wù)器域名或IP地址。對于backend 上面聲明的樣本組中的第一個服務(wù)器,運行狀況檢查會請求URI http://backend1.example.com/some/path。
定義自定義條件
您可以設(shè)置響應(yīng)必須滿足的自定義條件,以便服務(wù)器通過運行狀況檢查。條件在match塊中定義,該塊match在health_check指令的參數(shù)中引用。
1.在 http {} 級別,指定 match {} 塊并為其命名,例如:'server_ok'
http {
#...
match server_ok {
# tests are here
}
}
2.health_check 通過指定塊的 match 參數(shù)和 match 參數(shù)塊的名稱:
http {
#...
match server_ok {
status 200-399;
body !~ "maintenance mode";
}
server {
#...
location / {
proxy_pass http://backend;
health_check match=server_ok;
}
}
}
如果響應(yīng)的狀態(tài)代碼在范圍中,則傳遞運行狀況檢查 200- 399 并且其正文不包含字符串: ‘maintenance mode'
該 match 指令使 NGINX Plus 能夠檢查狀態(tài)代碼,標題字段和響應(yīng)正文。使用此指令可以驗證狀態(tài)是否在指定范圍內(nèi),響應(yīng)是否包含標頭,或者標頭或正文是否與正則表達式匹配。該 match 指令可以包含一個狀態(tài)條件,一個正文條件和多個標題條件。響應(yīng)必須滿足 match 塊中定義的所有條件,以便服務(wù)器通過運行狀況檢查。
例如,下面的 match 指令匹配有狀態(tài)代碼響應(yīng) 200,精確值 text/html 的Content-Type 標題,頁面中的文字:'Welcome to nginx!'.
match welcome {
status 200;
header Content-Type = text/html;
body ~ "Welcome to nginx!";
}
以下示例使用感嘆號(!)來定義響應(yīng)不得通過運行狀況檢查的特征。在這種情況下,健康檢查在非 301,302,303,或 307狀態(tài)碼,同時并沒有 Refresh 頭信息時將通過檢查,。
match not_redirect {
status ! 301-303 307;
header ! Refresh;
}
健康檢查可以在其他非 HTTP 協(xié)議中啟用, 例如 FastCGI, memcached, SCGI, uwsgi 甚至 TCP 和 UDP。
很多很好的特性,就是需要 Nginx Plus 才能使用。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Windows系統(tǒng)下安裝及部署Nginx詳細教程(含多個站點部署)
Nginx是一個很強大的高性能Web和反向代理服務(wù),也是一種輕量級的Web服務(wù)器,可以作為獨立的服務(wù)器部署網(wǎng)站,應(yīng)用非常廣泛,這篇文章主要給大家介紹了關(guān)于Windows系統(tǒng)下安裝及部署Nginx(含多個站點部署)的相關(guān)資料,需要的朋友可以參考下2024-01-01
詳解Nginx的超時keeplive_timeout配置步驟
Nginx 處理的每個請求均有相應(yīng)的超時設(shè)置,本文主要介紹了Nginx的超時keeplive_timeout配置步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05
修改nginx服務(wù)器類型實現(xiàn)簡單偽裝(隱藏nginx類型與版本等)
這篇文章主要介紹了修改nginx服務(wù)器類型實現(xiàn)簡單偽裝(隱藏nginx類型與版本等),需要的朋友可以參考下2016-03-03
使用nginx同域名下部署多個vue項目并使用反向代理的方法
這篇文章主要介紹了使用nginx同域名下部署多個vue項目并使用反向代理的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-02-02
nginx刷新頁面出現(xiàn)404解決方案(親測有效)
本文主要介紹了nginx刷新頁面出現(xiàn)404解決方案,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03

