upstream
nginx的核心功能——反向代理时基于upstream模块实现的。
反向代理方式是指用代理服务器来接受internet上的连接请求,然后将请求转发给内部网络中的上游服务器。一般的反向代理服务器的工作方式是一边接收客户端请求一边转发到上游服务器,而nginx当收到客户端请求时并不会立刻转发到上游服务器,而是先把用户请求完整的接受到nginx所在服务器的硬盘或内存中,再向上游服务器发起连接转发请求。这样做的缺点时延长了一个请求的处理时间,并且增加了用于缓存请求内容的内存和磁盘空间,优点则是降低了上游服务器的负载,尽量把压力放在了nginx服务器上。但是nginx返回上游服务器的结果时会边接收便转发。
nginx的这种工作方式为什么能降低上游服务器的负载呢?因为一般情况下客户端与代理服务器之间的网络环境非常复杂,网速较慢,这样一个请求可能要持续很久才能完成。而代理服务器与上游服务器之间通常时内网,网速很快,这样对于同一个请求,在nginx和代理服务器之间的传输速度会远高于客户端,这样就大大缩短了该请求占用上游服务器的连接时间,就能有效的降低上有服务器的负载了。
subrequest——子请求
subrequest是由http框架提供的一种分解复杂请求的设计模式,它可以把原始请求分解为许多子请求,使得诸多请求协同完成一个用户请求,并且每个请求只关注于一个功能。如果nginx需要将上游服务器的响应包体完全转发给下游客户端,就只需要使用upstream的方式就好,但是如果nginx需要根据上游服务器的响应来自己构建相应数据,就需要用到子请求,并由子请求使用upstream的机制来访问上游服务器。