本文仅对代理流程做简要解读。
首先先看下大概的配置:

    upstream proxy_server{server localhost:8082 weight=3;server localhost:8083 weight=1;}server{listen localhost:8081;server_name www.a.com www.b.com *.c.com;location /proxy {proxy_pass http://proxy_server;}}

使用upstream和proxy_pass配置时,解析配置的流程可参考NGINX源码之:模块配置解析(1)
这里主要看下upstream 和proxy_pass 两个配置,其他的相关的配置可参考Module ngx_http_upstream_module、Module ngx_http_proxy_module

1、ngx_http_upstream
在解析upstream配置时进入ngx_http_upstream方法:

在upstream块中的解析,主要是对server配置的解析:

2、ngx_http_proxy_pass
在解析proxy_pass配置时,进入ngx_http_proxy_pass方法:

完成初始化后,那么接下来就看请求进来的时候,怎么执行到ngx_http_proxy_handler了。
NGINX通过epoll机制监听请求,过程可参考NGINX源码之:event与epoll、请求处理,可以参考NGINX源码之:请求处理、同时设计请求处理的11个阶段,可以参考NGINX源码之:phase与handlers

在请求处理ngx_http_core_find_config_phase阶段、通过请求的uri匹配对应的location配置,再通过ngx_http_update_location_config设置content处理阶段的handler:

这里的clcf->handler,就是上面解析proxy_pass时,设置的ngx_http_proxy_handler。当执行到NGX_HTTP_CONTENT_PHASE阶段时:

优先使用设置的handler执行。

3、ngx_http_proxy_handler
在该方法中,主要看ngx_http_read_client_request_body():

这里就不对round_robin_peer机制做解读了。有兴趣可自行深入了解。
在NGINX中默认使用ngx_http_upstream_get_round_robin_peer获取upstream中的配置的某个server。也可通过配置hash、ip_hash、least_conn、random、keepalive等指定获取peer的算法。
具体配置方法可以参考peer获取算法设置

NGINX源码之:upstream与proxy_pass代理机制相关推荐

  1. Nginx源码分析之 upstream指令

    #Nginx 源码分析 upstream指令 想要的解决问题: 1:upstream存储结构 2:动态 upstream 流程(proxy_pass跟随变量或者域名) 最简单的配置文件 http {u ...

  2. NGINX源码之:目录导航

    Nginx版本1.20 debug用的源码码云地址点这里 本人debug用的cento7的图形界面系统,cento7中安装clion2020.1 NGINX源码依赖安装yum -y install g ...

  3. Nginx 源码分析-- 模块module 解析执行 nginx.conf 配置文件流程分析 一

    搭建nginx服务器时,主要的配置文件 nginx.conf 是部署和维护服务器人员经常要使用到的文件, 里面进行了许多服务器参数的设置.那么nginx 以模块 module为骨架的设计下是如何运用模 ...

  4. nginx源码编译、负载均衡及模块的扩展

    1.nginx源码编译 实验环境: iptables和selinux关闭 redhat6.5 nginx:test1: 172.25.1.11 [root@test1 ~]# ls nginx-1.1 ...

  5. Nginx 源码编译安装配置

    Nginx 源码安装 作者:闫涛 E-mail:coderyantao@qq.com 备注:实验环境为虚拟机,selinux.firewalld都已经关闭.此次安装面向新手,并没有提前把所有问题解决, ...

  6. LNMP架构环境搭建之PHP、Nginx源码编译安装及其简单配置应用

    LNMP架构中的Mysql见上一篇博文"LNMP架构环境搭建之mysql源码编译安装" 一.PHP简介 PHP(外文名:PHP: Hypertext Preprocessor,中文 ...

  7. 菜鸟nginx源码剖析

    菜鸟nginx源码剖析 配置与部署篇(一) 手把手配置nginx "I love you"  TCMalloc 对MYSQL 性能 优化的分析 菜鸟nginx源码剖析系列文章解读 ...

  8. Nginx 源码编译

    1.首先在官网下载Nginx 发布版的源码, Nginx 官网下载的地址是 :http://www.nginx.org/en/download.html 因为Nginx官网支持SVN,可以简单方便的使 ...

  9. Nginx源码从模块开发入手,3个项目弄透nginx模块开发丨Linux服务器开发丨C++后端开发丨中间件开发丨分布式丨web服务器

    Nginx源码从模块开发入手,3个项目弄透nginx模块开发 1. Nginx http请求的11个处理流程 2. Upstream, Filter,Handler模块分析 3. nginx如何拒绝无 ...

最新文章

  1. python 循环触发一次_Python中的循环
  2. postfix导入extmail.sql时报错
  3. 数据分析常用功能:巧用门户制作功能,让多个报表一览无余
  4. Ruby之旅—Ruby的Hello World
  5. LeetCode 945. 使数组唯一的最小增量(贪心)
  6. 《机器人爱好者(第3辑)》——D机器人引领自动驾驶汽车之路
  7. import/export win7中电源计划
  8. 金山卫士开源代码_官方下载地址
  9. $('xx')[0].files[0]的意思
  10. Linux下ppp拨号+电信3G模块
  11. Remote使用出现的问题及解决办法
  12. 【Python+Appium】开展自动化测试(八)swipe()滑动页面
  13. moment系列一:add() 方法和subtract() 方法的使用
  14. GEO数据库学习二(ID转换)
  15. 温度控制直流电机转速
  16. [OHIF-Viewers]医疗数字阅片-医学影像-Module: Panel-自定义面板-中-es6-Object.defineProperty()定义属性...
  17. 范里安中级微观经济学(第9版)分析笔记和课后习题答案解析-完整版 范里安《微观经济学:现代观点》(第9版)笔记和课后习题详解!
  18. 最强大脑 奇虎360 2017校园招聘笔试题
  19. Mac下将文件复制到移动硬盘
  20. 诠释的伤感独特个性日志发布:你是今生最让我伤心的人

热门文章

  1. matlab 微积分计算 自用1
  2. Java分布式架构, Dubbo面试题汇总
  3. 【python学习总结2】.py文件转化为.exe文件
  4. word之如何独立地拖动表格框线
  5. 唐骏的35句人生感悟,看完让你终生受益
  6. idea 导入新项目老是缺少依赖
  7. Web安全 学习日记1 - BurpSuite
  8. idea连接数据库时区设置
  9. 在win8上构建按拼音排序的GridView控件
  10. golang filepath.Walk遍历指定目录下的所有文件