Health-checker for Nginx upstream servers (support http upstream && stream upstream) html
该模块能够为Nginx提供主动式后端服务器健康检查的功能(同时支持四层和七层后端服务器的健康检测)。python
This nginx module is still under development, you can help improve and it.git
这个项目还在开发中完善中,欢迎贡献代码,或报告bug。一块儿使它变得更好。github
当你使用nginx做为负载均衡器时,nginx原生只提供了基本的重试方式来保证访问到正常的后端服务器。 json
相比之下,这个nginx第三方模块能够对后端服务器提供主动式的健康状态检测。
它维护了一个后端服务器列表,保证新的请求直接发送到一个健康的后端服务器。后端
主要特性:服务器
git clone https://github.com/nginx/nginx/nginx.git git clone https://github.com/zhouchangxun/ngx_healthcheck_module.git cd nginx/; git apply ../ngx_healthcheck_module/nginx-stable-1.12+.patch ./auto/configure --with-stream --add-module=../ngx_healthcheck_module/ make && make install
Back to TOCapp
user root; worker_processes 1; error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { server { listen 80; # status interface location /status { healthcheck_status; } # http front location / { proxy_pass http://http-cluster; } } # as a backend server. server { listen 8080; location / { root html; } } upstream http-cluster { # simple round-robin server 127.0.0.1:8080; server 127.0.0.2:81; check interval=3000 rise=2 fall=5 timeout=5000 type=http; check_http_send "GET / HTTP/1.0\r\n\r\n"; check_http_expect_alive http_2xx http_3xx; } } stream { upstream tcp-cluster { # simple round-robin server 127.0.0.1:22; server 192.168.0.2:22; check interval=3000 rise=2 fall=5 timeout=5000 default_down=true type=tcp; } server { listen 522; proxy_pass tcp-cluster; } upstream udp-cluster { # simple round-robin server 127.0.0.1:53; server 8.8.8.8:53; check interval=3000 rise=2 fall=5 timeout=5000 default_down=true type=udp; } server { listen 53; proxy_pass udp-cluster; } }
One typical output is负载均衡
root@changxun-PC:~/nginx-dev/ngx_healthcheck_module# curl localhost/status {"servers": { "total": 6, "generation": 3, "http": [ {"index": 0, "upstream": "http-cluster", "name": "127.0.0.1:8080", "status": "up", "rise": 119, "fall": 0, "type": "http", "port": 0}, {"index": 1, "upstream": "http-cluster", "name": "127.0.0.2:81", "status": "down", "rise": 0, "fall": 120, "type": "http", "port": 0} ], "stream": [ {"index": 0, "upstream": "tcp-cluster", "name": "127.0.0.1:22", "status": "up", "rise": 22, "fall": 0, "type": "tcp", "port": 0}, {"index": 1, "upstream": "tcp-cluster", "name": "192.168.0.2:22", "status": "down", "rise": 0, "fall": 7, "type": "tcp", "port": 0}, {"index": 2, "upstream": "udp-cluster", "name": "127.0.0.1:53", "status": "down", "rise": 0, "fall": 120, "type": "udp", "port": 0}, {"index": 3, "upstream": "udp-cluster", "name": "8.8.8.8:53", "status": "up", "rise": 3, "fall": 0, "type": "udp", "port": 0} ] }} root@changxun-PC:~/nginx-dev/ngx_healthcheck_module#
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
: http/upstream || stream/upstream
该指令能够打开后端服务器的健康检查功能。
Detail
:
type:健康检查包的类型,如今支持如下多种类型
好比后端提供的是443端口的应用,你能够去检查80端口的状态来判断后端健康情况。默认是0,表示跟后端server提供真实服务的端口同样。
A example as followed:
stream { upstream tcp-cluster { # simple round-robin server 127.0.0.1:22; server 192.168.0.2:22; check interval=3000 rise=2 fall=5 timeout=5000 default_down=true type=tcp; } server { listen 522; proxy_pass tcp-cluster; } ... }
Syntax
: healthcheck_status [html|csv|json]
Default
: healthcheck_status html
Context
: http/server/location
A example as followed:
http { server { listen 80; # status interface location /status { healthcheck_status; } ... }
Please report bugs
or submit patches by
Chance Chou (周长勋) <changxunzhou@qq.com>.
The health check part is based on Yaoweibin's
healthcheck module nginx_upstream_check_module (<http://github.com/yaoweibin/nginx_upstream_check_module>);
This module is licensed under the BSD license.
Copyright (C) 2017-, by Changxun Zhou <changxunzhou@qq.com>
Copyright (C) 2014 by Weibin Yao <yaoweibin@gmail.com>
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.