本文主要是介绍nginx(六十三)proxy模块(四)与上游服务器建立连接,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一 与上游服务器建立连接
前提: 通过'upstream'模块的'负载均衡算法'选中一台'server',准备建立'tcp'连接
① proxy_connect_timeout
含义: 建立tcp连接,控制'tcp三次握手'的超时时间变量: $upstream_connect_time'(包含TLS握手时间)'+++++++++++ 分割线 +++++++++++1)当60s 'tcp 三次握手无法'建立成功,上游就'没有响应','nginx'会自身记录'502'响应码说明: 出现'502'一定是没有与'上游'建立tcp连接2) 如果到后端的'网络路由'不通,就'不会'等待60s,立刻报错5023) 定界:看日志中的'超时'时间是否超过60s说明: 一般都是'后端服务器(负载高、连通性、协议等)'有问题
② proxy_socket_keepalive
说明: 与上游建立连接'成功'后,对tcp连接的'健康探活'
③ 与上游建立HTTP长连接
④ 上游建立tcp连接失败的容错方案
proxy_next_upstream
proxy_next_upstream_timeout
proxy_next_upstream_tries
⑤ proxy_bind
作用: 修改'tcp'连接的'source ip'
1)nginx有多个'ip'地址,不使用系统'默认'分配的ip地址与'上游'建连2)透传'ip'地址3)实现'使用浮动ip地址(nginx集群)'与'后端服务器'进行通信
应用场景
nginx proxy_bind修改源码支持多ip绑定 相关参考
proxy_bind和split_client结合突破tcp端口数量限制
⑥ proxy_ignore_client_abort
++++++++++++ "设置on的效果 [定界499报错] [用于debug测试] " ++++++++++++0) 原来'error.log'有日志,'access.log'没日志 --> 到只有'access.log'有日志1)由原来'大量'的'499'报错,到现在没有'499'报错,说明不是'nginx'的问题2)nginx会等待后端'处理完'(或者'超时'),然后'忠实记录'后端的返回信息到'日志' 现象: nginx中正常记录'非499(200、5xx)'到'access.log'日志,但是'客户端'没有收到'body'3)没有从'本质上'解决客户端没能拿到'请求响应'的问题499报错'解决'策略: 具体还是得从'请求链路'、'超时时间'、'程序处理性能的提升上'从根本解决问题++++++++++++ "建议" ++++++++++++1) 生产环境'不建议'使用proxy_ignore_client_abort on来'处理'这个错误2) 因为这样当有'大量瞬间断开的请求'时,后端会'默默地'全部处理,比较'浪费'资源3) 而且'并发压力'比较大时,用这种方法将'压垮'机器
499报错
⑦ proxy_send_timeout
++++++++++++++++++ "分割线" ++++++++++++++++++proxy_connect_timeout1)后端服务器连接的超时时间,发起'握手等候响应'超时时间(代理'连接'超时)默认60sproxy_read_timeout1)它决定了nginx会'等待多长时间'来获得请求的响应('响应超时')默认值60s
这篇关于nginx(六十三)proxy模块(四)与上游服务器建立连接的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!