upstream 即上游的意思,是一个想对到概念,从客户端到中间的网络链路到服务器到链路中,可以将越接近客户到设备越理解成下游,相反到为上游,所以如果只有一个upstream,可以将其为理解成转发客户到请求到服务器,然后响应服务器转发到客户端到过程,源码主要流程如下:

1、创建upstream

ngx_http_upstream_init

删除超时定时器

创建到上游到请求

挂接一些处理函数,包含第6步中要用到的请求结束后upstream到清理函数

2、建立与上游的连接

ngx_http_upstream_connect

创建socket、connetion,发起tcp建连请求,使用epoll发送请求,挂接upstream的handler,包括第4、5步中处理上游应答的处理函数

3、发送到上游的请求

ngx_http_upstream_send_request

4、处理上游的响应头

process_header 解析请求头

ngx_http_upstream_process_headers处理请求头

5、处理上游的响应体

ngx_http_upstream_process_body_in_memory

如果需要转发相应体,可以自己实现input_filter,若不自己实现则使用默认的ngx_http_upstream_non_buffered_filter

(1)upstream与上游之间网速很快时,使用大内存甚至文件,缓存上游大请求

(2)upstream与下游之间网速很快时,使用固定大小内存,不需要过多缓存请求

ngx_http_upstream_send_response中通过判断

buffering决定走上述的那个流程

6、结束upstream 请求

ngx_http_upstream_cleanup

主要释放一些upstream使用的资源

传统方法中常用的钩子:

uscf->peer.init_upstream. 初始化 upstream配置,

在upstream配置初始化过程中用钩子us->peer.init初始化请求,

在初始化请求中往往创建请求和upstream的关系,然后用钩子peer.get定义获取后端服务器方法等,peer.free与peer.get匹配。

nginx源码中upstream的主要流程的更多相关文章

  1. nginx源码分析之hash的实现

    nginx实现了自己的hash数据结构,正如数据结构中讲述的那样,nginx用开放链表法解决冲突,不过不同的是一旦一个hash表被初始化后就不会被修改,即插入和删除,只进行查询操作,所以nginx通过 ...

  2. 菜鸟nginx源码剖析 框架篇(一) 从main函数看nginx启动流程(转)

    俗话说的好,牵牛要牵牛鼻子 驾车顶牛,处理复杂的东西,只要抓住重点,才能理清脉络,不至于深陷其中,不能自拔.对复杂的nginx而言,main函数就是“牛之鼻”,只要能理清main函数,就一定能理解其中 ...

  3. nginx源码安装

    1,首先解决系统环境: 安装rpm包组{CentOS6 跟开发相关的包组:} a.  Development Tools #yum groupinstall "Development Too ...

  4. Nginx源码分析:3张图看懂启动及进程工作原理

    编者按:高可用架构分享及传播在架构领域具有典型意义的文章,本文由陈科在高可用架构群分享.转载请注明来自高可用架构公众号「ArchNotes」.   导读:很多工程师及架构师都希望了解及掌握高性能服务器 ...

  5. nginx源码分析-源码结构

    本文主要简单介绍nginx源码目录结构.程序编译流程.如何构建学习nginx的环境等.本文以及后续nginx源码分析文章是基于nginx当前(2009-02-27)的稳定版本0.6.35进行的分析,该 ...

  6. 菜鸟nginx源码剖析数据结构篇(九) 内存池ngx_pool_t[转]

    菜鸟nginx源码剖析数据结构篇(九) 内存池ngx_pool_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn. ...

  7. 菜鸟nginx源码剖析数据结构篇(六) 哈希表 ngx_hash_t(上)[转]

    菜鸟nginx源码剖析数据结构篇(六) 哈希表 ngx_hash_t(上) Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.c ...

  8. 菜鸟nginx源码剖析数据结构篇(五) 基数树 ngx_radix_tree_t[转]

    菜鸟nginx源码剖析数据结构篇(五) 基数树 ngx_radix_tree_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blo ...

  9. nginx源码分析线程池详解

    nginx源码分析线程池详解 一.前言     nginx是采用多进程模型,master和worker之间主要通过pipe管道的方式进行通信,多进程的优势就在于各个进程互不影响.但是经常会有人问道,n ...

随机推荐

  1. nginx內建模块使用

    目录 nginx內建模块使用 1. 內建模块的引入 1.1 查看安装信息 1.2 重新指定配置信息 2. 內建模块的使用 2.1 http_stub_status_module 2.2 http_ra ...

  2. Ubuntu 16.04主题美化和软件推荐

    http://www.linuxidc.com/Linux/2016-09/135165.htm http://www.techweb.com.cn/network/system/2015-11-20 ...

  3. distcc加速内核编译

    Linux内核编译实在是费时间的事,搞内核移植的时候总要编译,生命有一部分就浪费在等内核编译完成上,有心想买个HP的工作站,看了下Z840的价格,想想还是算了.distcc早就听说过,一直没有去试试, ...

  4. linux下性能测试工具netperf使用

    一.功能简介 netperf是一款针对网络性能的测试工具,主要基于TCP或UDP的传输.根据应用的不同,可以进行批量数据传输(bulk data transfer)模式和请求/应答(request/r ...

  5. Idea中优化Markdown Support显示效果

    转自:https://www.jianshu.com/p/d093c42a8c29 因为工作中为提高工作效率,我一般习惯于直接在`idea`中使用`markdow support`插件来进行相关文档的 ...

  6. VMWare Workstation和VMWare vSphere(转)

    VMware workstation一定是安装在window操作系统上的. VMware vSphere可以直接安装在x86机器上,使这台机器完全虚拟化. VMware vSphere主要是企业级用户 ...

  7. GoogleMap-------API KEY申请流程

    前言:此文是关于Google Maps Android API v2 KEY的申请流程介绍. 1.首先访问https://code.google.com/apis/console/?pli=1#pro ...

  8. thinkPHP5.0的学习研究【基础】

    2017年6月19日13:25:56 基础:1.ThinkPHP5的环境要求如下: PHP >= 5.4.0        PDO PHP Extension        MBstring P ...

  9. Unity3d音乐

    public  AudioClip  routineAudio; public  AudioClip  gameAudio; public  AudioClip  RewardAudio; publi ...

  10. centos7.0 安转apache2.4

    安装apache2.4的需要安转apr和apr-util 包 APR和APR-util的下载地址 http://apache.fayea.com//apr/apr-1.6.2.tar.gzhttp:/ ...