Nginx uptream健康检查

upstream hello {
server 100.14.1.3:1201;
server 100.14.1.4:1201;
check interval=3000 rise=2 fall=5 timeout=1000 type=http;
check_http_send "HEAD /product HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
server {
listen 80;
server_name hello.youbest.com;
access_log /data/logs/nginx/hello.youbest.com.access.log main;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://hello;
}
}

首先要确认服务类型是 http 还是tcp

 check interval=3000 rise=2 fall=5 timeout=1000 type=http; 

 or

 check interval=3000 rise=2 fall=5 timeout=1000 type=tcp;

 然后确认健康检查的url是否支持 HEAD请求或者GET 请求

 [[email protected] ~]# curl -v -XHEAD http://hello.youbest.com/product
  • About to connect() to hello.youbest.com port 80 (#0)
  • Trying 10.24.1.3... connected
  • Connected to hello.youbest.com (100.14.1.3) port 80 (#0)

    HEAD / HTTP/1.1
    User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
    Host: baidu.com
    Accept: /

    < HTTP/1.1 200 OK
    < Date: Tue, 07 Jan 2020 08:29:28 GMT
    < Server: Apache
    < Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
    < ETag: "51-47cf7e6ee8400"
    < Accept-Ranges: bytes
    < Content-Length: 81
    < Cache-Control: max-age=86400
    < Expires: Wed, 08 Jan 2020 08:29:28 GMT
    < Connection: Keep-Alive
    < Content-Type: text/html
    <

以上返回表示支持 HEAD 请求 nginx 就可以这样做健康检查

    check interval=3000 rise=2 fall=5 timeout=1000 type=http;
    check_http_send "HEAD /product HTTP/1.0\r\n\r\n";
    check_http_expect_alive http_2xx http_3xx;

其中 /product 表示服务里面的埋点路径

< HTTP/1.1 200 OK 表示返回200状态

如果HEAD 请求不支持 参考下面baidu.com的GET 请求

[[email protected] ~]# curl -v -XGET http://baidu.com

  • About to connect() to baidu.com port 80 (#0)
  • Trying 220.181.38.148... connected
  • Connected to baidu.com (220.181.38.148) port 80 (#0)

    GET / HTTP/1.1
    User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
    Host: baidu.com
    Accept: /

    < HTTP/1.1 200 OK
    < Date: Tue, 07 Jan 2020 08:41:38 GMT
    < Server: Apache
    < Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
    < ETag: "51-47cf7e6ee8400"
    < Accept-Ranges: bytes
    < Content-Length: 81
    < Cache-Control: max-age=86400
    < Expires: Wed, 08 Jan 2020 08:41:38 GMT
    < Connection: Keep-Alive
    < Content-Type: text/html
    <
    <html>
    <meta http-equiv="refresh" content="0;url=http://www.baidu.com/"&gt;
    </html>

  • Connection #0 to host baidu.com left intact
  • Closing connection #0

以上表示支持 GET 请求 nginx 就可以这样做健康检查

    check interval=3000 rise=2 fall=5 timeout=1000 type=http;
    check_http_send "GET /product HTTP/1.0\r\n\r\n";
    check_http_expect_alive http_2xx http_3xx;

加了健康检查后,当后端有多台服务器提供服务时
Down掉的机器就不会被代理转发业务过去
从而保障业务的正常处理

原文地址:https://blog.51cto.com/12111640/2465021

时间: 2024-11-13 10:22:36

Nginx uptream健康检查的相关文章

nginx backend 健康检查

ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带) 严格来说,nginx自带是没有针对负载均衡后端节点的健康检查的,但是可以通过默认自带的ngx_http_proxy_module 模块和ngx_http_upstream_module模块中的相关指令来完成当后端节点出现故障时,自动切换到健康节点来提供访问. 这里列出这两个模块中相关的指令:ngx_http_proxy_module 模块中的 proxy_connect_timeout

nginx.conf配置文件里的upstream加入健康检查

查看NGINX启用了那些模块: # ./nginx -V Tengine version: Tengine/2.1.1 (nginx/1.6.2) built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) TLS SNI support enabled configure arguments: --prefix=/apps/tengine-2.1.1 loaded modules: ngx_core_module (static) ngx_errl

Nginx 健康检查

Nginx 的健康检查这块笔者在网上看了很多文章,基本都是零零散散的,讲各种实现方式,没有一篇能完整的讲当下的 Nginx 实现健康检查的几种方式,应该选哪一种来使用,于是笔者想总结一篇. 一.目前 Nginx 支持两种主流的健康检查模式 主动检查模式 Nginx 服务端会按照设定的间隔时间主动向后端的 upstream_server 发出检查请求来验证后端的各个 upstream_server 的状态. 如果得到某个服务器失败的返回超过一定次数,比如 3 次就会标记该服务器为异常,就不会将请求

Nginx实战系列之功能篇----后端节点健康检查

公司前一段对业务线上的nginx做了整理,重点就是对nginx上负载均衡器的后端节点做健康检查.目前,nginx对后端节点健康检查的方式主要有3种,这里列出: 1.ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带)     官网地址:http://nginx.org/cn/docs/http/ngx_http_proxy_module.html#proxy_next_upstream 2.nginx_upstream_check_mod

【转】nginx 主动式后端服务器健康检查

原文链接  http://tengine.taobao.org/document_cn/http_upstream_check_cn.html ngx_http_upstream_check_module 该模块可以为Tengine提供主动式后端服务器健康检查的功能. 该模块在Tengine-1.4.0版本以前没有默认开启,它可以在配置编译选项的时候开启:./configure --with-http_upstream_check_module Examples http { upstream

nginx对后端节点的健康检查

最近梳理了下手头的业务,发现nginx层配有几种健康检查方式,在这里做个总结,记录下nginx做负载均衡时对后端节点的健康检查方式: 1.ngx_http_proxy_module 模块中的下面三个指令(nginx自带模块) proxy_connect_timeout 60s 设置与后端服务器建立连接的超时时间.应该注意这个超时一般不可能大于75秒 proxy_read_timeout 60s 定义从后端服务器读取响应的超时.此超时是指相邻两次读操作之间的最长时间间隔,而不是整个响应传输完成的最

Nginx实战系列之功能篇----后端节点健康检查(转)

公司前一段对业务线上的nginx做了整理,重点就是对nginx上负载均衡器的后端节点做健康检查.目前,nginx对后端节点健康检查的方式主要有3种,这里列出:   1.ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带)    官网地址:http://nginx.org/cn/docs/http/ng ... proxy_next_upstream2.nginx_upstream_check_module模块    官网网址:https:

分析shell实现nginx反向代理后端realserver健康检查

今天阅读老男孩教育博客http://oldboy.blog.51cto.com/ 中一篇关于shell实现nginx反向代理后端realserver健康检查的文章,根据其中一个学员朋友的思路自己写了一个脚本. 一.nginx.conf部分内容如下:     upstream rs_pools {     server 10.0.0.8:80 weight=5;     server 10.0.0.9:80 weight=5;     server 10.0.0.10:80 weight=5;  

Nginx被动健康检查和主动健康检查

1.被动健康检查 Nginx自带有健康检查模块:ngx_http_upstream_module,可以做到基本的健康检查,配置如下: upstream cluster{ server 172.16.0.23:80 max_fails=1 fail_timeout=10s; server 172.16.0.24:80 max_fails=1 fail_timeout=10s; # max_fails=1和fail_timeout=10s 表示在单位周期为10s钟内,中达到1次连接失败,那么接将把节