您好,登錄后才能下訂單哦!
本文小編為大家詳細(xì)介紹“Nginx http運(yùn)行狀況健康檢查如何配置”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Nginx http運(yùn)行狀況健康檢查如何配置”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。
被動(dòng)檢查
對(duì)于被動(dòng)健康檢查,nginx 和 nginx plus 會(huì)在事件發(fā)生時(shí)對(duì)其進(jìn)行監(jiān)控,并嘗試恢復(fù)失敗的連接。如果仍然無法恢復(fù)正常,nginx 開源版和 nginx plus 會(huì)將服務(wù)器標(biāo)記為不可用,并暫時(shí)停止向其發(fā)送請(qǐng)求,直到它再次標(biāo)記為活動(dòng)狀態(tài)。
上游服務(wù)器標(biāo)記為不可用的條件是為每個(gè)上游服務(wù)器定義的,其中包含塊中 server 指令的參數(shù) upstream:
fail_timeout - 設(shè)置服務(wù)器標(biāo)記為不可用時(shí)必須進(jìn)行多次失敗嘗試的時(shí)間,以及服務(wù)器標(biāo)記為不可用的時(shí)間(默認(rèn)為 10 秒)。
max_fails - 設(shè)置在 fail_timeout 服務(wù)器標(biāo)記為不可用期間必須發(fā)生的失敗嘗試次數(shù)(默認(rèn)為 1 次嘗試)。 在以下示例中,如果 nginx 未能在 30 秒內(nèi)向服務(wù)器發(fā)送請(qǐng)求或未收到響應(yīng) 3 次,則表示服務(wù)器在 30 秒內(nèi)不可用:
upstream backend { server backend1.example.com; server backend2.example.com max_fails=3 fail_timeout=30s; }
需要注意的是如果只有一個(gè)單一的服務(wù)器組中,將 fail_timeout 和 max_fails 參數(shù)被忽略,服務(wù)器永遠(yuǎn)不會(huì)標(biāo)記為不可用。
服務(wù)器慢啟動(dòng)
最近恢復(fù)的服務(wù)器很容易被連接淹沒,這可能導(dǎo)致服務(wù)器再次被標(biāo)記為不可用。慢啟動(dòng)允許上游服務(wù)器在恢復(fù)或變得可用之后逐漸將其權(quán)重從零恢復(fù)到其標(biāo)稱值。這可以指定 upstream 的 server 模塊的 slow_start 參數(shù)來完成:
upstream backend { server backend1.example.com slow_start=30s; server backend2.example.com; server 192.0.0.1 backup; }
注意:如果組中只有一臺(tái)服務(wù)器,則 slow_start 參數(shù)將被忽略,而服務(wù)器永遠(yuǎn)不會(huì)被標(biāo)記位不可用狀態(tài)。慢啟動(dòng)是 nginx plus 的專有功能
nginx plus的主動(dòng)檢查
nginx plus 可以通過向每個(gè)服務(wù)器發(fā)送特殊的健康檢查請(qǐng)求并驗(yàn)證正確的響應(yīng)來定期檢查上游服務(wù)器的運(yùn)行狀況。
要啟用活動(dòng)運(yùn)行狀況檢查:
1.在 location 區(qū)塊將 requests(proxy_pass)傳遞給上游組的過程中,包含 health_check 指令:
server { location / { proxy_pass http://backend; health_check; } }
此代碼段定義了一個(gè)服務(wù)器,它將所有請(qǐng)求匹配到 location / 傳遞給調(diào)用的上游組 backend。它還使用該 health_check 指令啟用高級(jí)運(yùn)行狀況監(jiān)視:默認(rèn)情況下,nginx plus 每五秒向組中的每個(gè)服務(wù)器發(fā)送一個(gè) “/” 請(qǐng)求 backend。
如果任何通信錯(cuò)誤或發(fā)生超時(shí)(在服務(wù)器返回的狀態(tài)碼超出 200- 399的范圍)的健康檢查失敗。服務(wù)器被標(biāo)記為不健康,并且 nginx plus 在再次通過運(yùn)行狀況檢查之前不會(huì)向其發(fā)送客戶端請(qǐng)求。
另一個(gè)可選項(xiàng):您可以指定另一個(gè)用于運(yùn)行狀況檢查的端口,例如,用于監(jiān)視同一主機(jī)上的許多服務(wù)的運(yùn)行狀況。使用指令的 port 參數(shù)指定新端口 health_check:
server { location / { proxy_pass http://backend; health_check port=8080; } }
2.在上游服務(wù)器組,使用 zone 指令定義一個(gè)共享內(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ū)域在所有工作進(jìn)程之間共享,并存儲(chǔ)上游組的配置。這使工作進(jìn)程能夠使用同一組計(jì)數(shù)器來跟蹤組中服務(wù)器的響應(yīng)。
可以使用 health_check 指令的參數(shù)覆蓋活動(dòng)運(yùn)行狀況檢查的默認(rèn)值:
location / { proxy_pass http://backend; health_check interval=10 fails=3 passes=2; }
此處,該 interval 參數(shù)將運(yùn)行狀況檢查之間的延遲從默認(rèn)的 5 秒增加到 10 秒。該 fails 參數(shù)要求服務(wù)器三次運(yùn)行狀況檢查失敗時(shí),以將其標(biāo)記為運(yùn)行狀況不佳(從默認(rèn)值開始)。最后,passes 參數(shù)意味著服務(wù)器必須通過兩次連續(xù)檢查才能再次標(biāo)記為健康,而不是默認(rèn)值。
指定請(qǐng)求的url
在 health_check 指令中指定 uri 參數(shù)來設(shè)置健康檢查請(qǐng)求的路由:
location / { proxy_pass http://backend; health_check uri=/some/path; }
指定的 uri 將附加到為 upstream 塊中的服務(wù)器設(shè)置的服務(wù)器域名或ip地址。對(duì)于backend 上面聲明的樣本組中的第一個(gè)服務(wù)器,運(yùn)行狀況檢查會(huì)請(qǐng)求uri http://backend1.example.com/some/path。
定義自定義條件
您可以設(shè)置響應(yīng)必須滿足的自定義條件,以便服務(wù)器通過運(yùn)行狀況檢查。條件在match塊中定義,該塊match在health_check指令的參數(shù)中引用。
1.在 http {} 級(jí)別,指定 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)代碼在范圍中,則傳遞運(yùn)行狀況檢查 200- 399 并且其正文不包含字符串: ‘maintenance mode'
該 match 指令使 nginx plus 能夠檢查狀態(tài)代碼,標(biāo)題字段和響應(yīng)正文。使用此指令可以驗(yàn)證狀態(tài)是否在指定范圍內(nèi),響應(yīng)是否包含標(biāo)頭,或者標(biāo)頭或正文是否與正則表達(dá)式匹配。該 match 指令可以包含一個(gè)狀態(tài)條件,一個(gè)正文條件和多個(gè)標(biāo)題條件。響應(yīng)必須滿足 match 塊中定義的所有條件,以便服務(wù)器通過運(yùn)行狀況檢查。
例如,下面的 match 指令匹配有狀態(tài)代碼響應(yīng) 200,精確值 text/html 的content-type 標(biāo)題,頁面中的文字:'welcome to nginx!'.
match welcome { status 200; header content-type = text/html; body ~ "welcome to nginx!"; }
以下示例使用感嘆號(hào)(!)來定義響應(yīng)不得通過運(yùn)行狀況檢查的特征。在這種情況下,健康檢查在非 301,302,303,或 307狀態(tài)碼,同時(shí)并沒有 refresh 頭信息時(shí)將通過檢查,。
match not_redirect { status ! 301-303 307; header ! refresh; }
健康檢查可以在其他非 http 協(xié)議中啟用, 例如 fastcgi, , scgi, 甚至 tcp 和 udp。
很多很好的特性,就是需要 nginx plus 才能使用。
讀到這里,這篇“Nginx http運(yùn)行狀況健康檢查如何配置”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。