![](/images/nginx/next_upstream%E7%A4%BA%E6%84%8F%E5%9B%BE.png)
![](/images/tcp/tcp_guide_%E8%B6%85%E6%97%B6%E9%87%8D%E4%BC%A0.png)
![](/images/tls/TLS%E6%8F%A1%E6%89%8B.png)
当上游出错时,作为负载均衡的Nginx可以实时更换Server,在客户端无感知的情况下重新转发HTTP请求。这一功能在Nginx指令中称为next upstream,本文将详细介绍其用法及实现原理。
在OSI网络模型中,传输层的TCP协议通过内核提供的系统调用向Nginx反馈错误,表示层的TLS/SSL协议通过openssl库向Nginx返回错误,而应用层的HTTP协议(或者uwsgi、gRPC、CGI、memcached等协议)通过Response的Decode解码流程返回错误。当Nginx能够通过重试解决这些错误时,我们可以使用next upstream机制对客户端隐藏个别上游Server由于宕机、网络异常产生的错误,这可以极大的提升整个分布式系统的可用性。