1diff --git a/ngx_http_upstream_fair_module.c b/ngx_http_upstream_fair_module.c 2index a4419ca..af80bba 100644 3--- a/ngx_http_upstream_fair_module.c 4+++ b/ngx_http_upstream_fair_module.c 5@@ -9,6 +9,10 @@ 6 #include <ngx_core.h> 7 #include <ngx_http.h> 8 9+#if (NGX_HTTP_UPSTREAM_CHECK) 10+#include "ngx_http_upstream_check_module.h" 11+#endif 12+ 13 typedef struct { 14 ngx_uint_t nreq; 15 ngx_uint_t total_req; 16@@ -42,6 +42,10 @@ typedef struct { 17 ngx_uint_t max_fails; 18 time_t fail_timeout; 19 20+#if (NGX_HTTP_UPSTREAM_CHECK) 21+ ngx_uint_t check_index; 22+#endif 23+ 24 time_t accessed; 25 ngx_uint_t down:1; 26 27@@ -474,6 +478,15 @@ ngx_http_upstream_init_fair_rr(ngx_conf_t *cf, ngx_http_upstream_srv_conf_t *us) 28 peers->peer[n].fail_timeout = server[i].fail_timeout; 29 peers->peer[n].down = server[i].down; 30 peers->peer[n].weight = server[i].down ? 0 : server[i].weight; 31+#if (NGX_HTTP_UPSTREAM_CHECK) 32+ if (!server[i].down) { 33+ peers->peer[n].check_index = 34+ ngx_http_upstream_check_add_peer(cf, us, &server[i].addrs[j]); 35+ } 36+ else { 37+ peers->peer[n].check_index = (ngx_uint_t) NGX_ERROR; 38+ } 39+#endif 40 n++; 41 } 42 } 43@@ -524,6 +537,15 @@ ngx_http_upstream_init_fair_rr(ngx_conf_t *cf, ngx_http_upstream_srv_conf_t *us) 44 backup->peer[n].max_fails = server[i].max_fails; 45 backup->peer[n].fail_timeout = server[i].fail_timeout; 46 backup->peer[n].down = server[i].down; 47+#if (NGX_HTTP_UPSTREAM_CHECK) 48+ if (!server[i].down) { 49+ backup->peer[n].check_index = 50+ ngx_http_upstream_check_add_peer(cf, us, &server[i].addrs[j]); 51+ } 52+ else { 53+ backup->peer[n].check_index = (ngx_uint_t) NGX_ERROR; 54+ } 55+#endif 56 n++; 57 } 58 } 59@@ -580,6 +602,9 @@ ngx_http_upstream_init_fair_rr(ngx_conf_t *cf, ngx_http_upstream_srv_conf_t *us) 60 peers->peer[i].weight = 1; 61 peers->peer[i].max_fails = 1; 62 peers->peer[i].fail_timeout = 10; 63+#if (NGX_HTTP_UPSTREAM_CHECK) 64+ peers->peer[i].check_index = (ngx_uint_t) NGX_ERROR; 65+#endif 66 } 67 68 us->peer.data = peers; 69@@ -723,6 +748,12 @@ ngx_http_upstream_fair_try_peer(ngx_peer_connection_t *pc, 70 peer = &fp->peers->peer[peer_id]; 71 72 if (!peer->down) { 73+#if (NGX_HTTP_UPSTREAM_CHECK) 74+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0, 75+ "[upstream_fair] get fair peer, check_index: %ui", 76+ peer->check_index); 77+ if (!ngx_http_upstream_check_peer_down(peer->check_index)) { 78+#endif 79 if (peer->max_fails == 0 || peer->shared->fails < peer->max_fails) { 80 return NGX_OK; 81 } 82@@ -733,6 +764,9 @@ ngx_http_upstream_fair_try_peer(ngx_peer_connection_t *pc, 83 peer->shared->fails = 0; 84 return NGX_OK; 85 } 86+#if (NGX_HTTP_UPSTREAM_CHECK) 87+ } 88+#endif 89 } 90 91 return NGX_BUSY; 92