
文章插图
Nginx作为生产的公网访问入口,起到负载均衡、分流、限流、安全限制等作用,合理的配置可以在不更改代码、架构的前提下,获得意想不到的收获 。
本文我们将讨论下Nginx的健康检查模块,通过本文的了解可以知道Nginx的故障转移和健康检查的检测机制,以便我们更好的应用到生产环境中 。
Nginx原生模块我们在使用nginx做反向代理都会使用到以下两个模块:
1 .ngx_http_proxy_module定义允许将请求传递到另一台服务器 。此模块下常用指令如下:
proxy_passproxy_cacheproxy_connect_timeoutproxy_read_timeoutproxy_send_timeoutproxy_next_upstream- ngx_http_upstream_module
upstreamserverip_hash默认负载均衡配置http {upstream myApp1 {server srv1.example.com;server srv2.example.com;server srv3.example.com;}server {listen 80;location / {proxy_pass http://myapp1;}}}此时nginx默认的负载均衡策略是轮询外,还有其他默认参数,如下:http {upstream myapp1 {server srv1.example.com weight=1 max_fails=1 fail_timeout=10;server srv2.example.com weight=1 max_fails=1 fail_timeout=10;server srv3.example.com weight=1 max_fails=1 fail_timeout=10;}server {listen 80;proxy_send_timeout=60;proxy_connect_timeout=60;proxy_read_timeout=60;proxy_next_upstream=error timeout;location / {proxy_pass http://myapp1;}}}其中涉及到两个功能点:- 故障转移
Syntax:proxy_read_timeout time;Default:proxy_read_timeout 60s;Context:http, server, location定义从代理服务器读取响应的超时 。仅在两个连续的读操作之间设置超时,而不是为整个响应的传输 。如果代理服务器在此时间内未传输任何内容,则关闭连接 。Syntax:proxy_connect_timeout time;Default:proxy_connect_timeout 60s;Context:http, server, location定义与代理服务器建立连接的超时 。应该注意,此超时通常不会超过75秒 。Syntax:proxy_send_timeout time;Default:proxy_send_timeout 60s;Context:http, server, location设置将请求传输到代理服务器的超时 。仅在两个连续的写操作之间设置超时,而不是为整个请求的传输 。如果代理服务器在此时间内未收到任何内容,则关闭连接Syntax:proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | non_idempotent | off ...;Default:proxy_next_upstream error timeout;Context:http, server, location指定在何种情况下一个失败的请求应该被发送到下一台后端服务器:error和后端服务器建立连接时,或者向后端服务器发送请求时,或者从后端服务器接收响应头时,出现错误timeout和后端服务器建立连接时,或者向后端服务器发送请求时,或者从后端服务器接收响应头时,出现超时invalid_header后端服务器返回空响应或者非法响应头http_500后端服务器返回的响应状态码为500http_502后端服务器返回的响应状态码为502http_503后端服务器返回的响应状态码为503http_504后端服务器返回的响应状态码为504http_404后端服务器返回的响应状态码为404off停止将请求发送给下一台后端服务器从以上几个指令可以看出,在默认配置下,后端节点一旦出现error和timeout情况时,nginx会通过proxy_next_upstream进行故障转移,将发往不健康节点的请求,自动转移至健康节点 。其中timeout设置和proxy_send_timeout time、proxy_connect_timeout time、proxy_read_timeout time有关 。除了error、timeout,我们可以设置更详细的触发条件,如http_502、http_503等 。注意:只有在没有向客户端发送任何数据以前,将请求转给下一台后端服务器才是可行的 。也就是说,如果在传输响应到客户端时出现错误或者超时,这类错误是不可能恢复的 。
- 健康检查
Syntax:server address [parameters];Default:—Context:upstreammax_fails=number设定Nginx与服务器通信的尝试失败的次数 。在fail_timeout参数定义的时间段内,如果失败的次数达到此值,Nginx就认为服务器不可用 。此时在接下来的fail_timeout时间段,服务器不会再被尝试 。失败的尝试次数默认是1 。设为0就会停止统计尝试次数,即不对后端节点进行健康检查 。认为服务器是一直可用的 。fail_timeout=time设定服务器被认为不可用的时间段以及统计失败尝试次数的时间段 。在这段时间中,服务器失败次数达到指定的尝试次数,服务器就被认为不可用 。默认情况下,该超时时间是10秒 。
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4款瘦身食谱+6款减肥茶
- 孕妇眼前发黑快晕倒了
- 昌宁茶品牌持续飘香,南明黔茶飘香品茗健康茶文化活动圆满落幕
- 家庭存茶有诀窍:牢记5大存茶法则,存出健康醇香的好茶
- 如何挑选健康的鸽子
- 天鹏健康医疗大数据及人工智能应用创新平台项目落户重庆|钛快讯
- nginx中加入opentracing能力
- nginx 这一篇就够了
- 普洱茶健康资料盘点,普洱茶健康的好伴侣
- 五六十岁的人,去医院体检时,哪些项目最应该检查?
