IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> nginx connect peer流程源码分析 -> 正文阅读

[PHP知识库]nginx connect peer流程源码分析

完整的connect upstream流程

nginx proxy_pass和upstream源码分析_realmardrid的博客-CSDN博客

proxy_pass绑定loc的handler为ngx_http_proxy_handler函数

ngx_http_proxy_handler函数

在ngx_http_proxy_handler函数中调用ngx_http_upstream_create

static ngx_int_t

ngx_http_proxy_handler(ngx_http_request_t *r)

{

...

????if (ngx_http_upstream_create(r) != NGX_OK) {

????????return NGX_HTTP_INTERNAL_SERVER_ERROR;

????}

????// 设置upstream处理方法

????rc = ngx_http_read_client_request_body(r, ngx_http_upstream_init);

...

}

//紧接着分析ngx_http_upstream_init

void

ngx_http_upstream_init(ngx_http_request_t *r)

{

...

????ngx_http_upstream_init_request(r);

...

}

static void

ngx_http_upstream_init_request(ngx_http_request_t *r)

{

...

???????if (u->resolved->sockaddr) {

????????????if (ngx_http_upstream_create_round_robin_peer(r, u->resolved)

????????????????!= NGX_OK)

????????????{

????????????????ngx_http_upstream_finalize_request(r, u,

???????????????????????????????????????????????NGX_HTTP_INTERNAL_SERVER_ERROR);

????????????????return;

????????????}

????????????ngx_http_upstream_connect(r, u);

????????????return;

????????}

????????host = &u->resolved->host;

????????umcf = ngx_http_get_module_main_conf(r, ngx_http_upstream_module);

????????// 调用connect_peer前先get_round_robin_peer

????????ngx_http_upstream_connect(r, u);

...

}

ngx_http_upstream_create_round_robin_peer函数

ngx_int_t

ngx_http_upstream_create_round_robin_peer(ngx_http_request_t *r,

????ngx_http_upstream_resolved_t *ur)

{

...

????// 获取rrp

????rrp = r->upstream->peer.data;

????//peers alloc?

????peers = ngx_pcalloc(r->pool, sizeof(ngx_http_upstream_rr_peers_t)

?????????????????????+ sizeof(ngx_http_upstream_rr_peer_t) * (ur->naddrs - 1));

????for (i = 0; i < ur->naddrs; i++) {

????????peer[i].sockaddr = sockaddr;

????????????peer[i].socklen = socklen;

????????????peer[i].name.len = len;

????????????peer[i].name.data = p;

????????????peer[i].id.len = 0;

????????????peer[i].id.data = NULL;

????????????peer[i].weight = 1;

????????????peer[i].effective_weight = 1;

????????????peer[i].current_weight = 0;

????????????peer[i].max_fails = 1;

????????????peer[i].fail_timeout = 10;

????}

????rrp->peers = peers;

????// 设置get和free函数

????r->upstream->peer.get = ngx_http_upstream_get_round_robin_peer;

????r->upstream->peer.free = ngx_http_upstream_free_round_robin_peer;

...

}

ngx_http_upstream_connect函数

void

ngx_http_upstream_connect(ngx_http_request_t *r, ngx_http_upstream_t *u)

{

...

????// final 找到了

????rc = ngx_event_connect_peer(&u->peer);

...

}

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-14 13:05:46  更:2021-09-14 13:06:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:04:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码