随笔分类 - http&server&业务
http Server 四层 七层
udp 业务
摘要:回到ngx_http_upstream_send_response,如果是buffering,就会进入后面的处理过程,准备一个ngx_event_pipe_t结构的数据,这个结构可以通过upstream的u->pipe进行索引找到。首先设置p->output_filter输出过滤函数为ngx_htt
阅读全文
摘要:在如下网络层面下,代理(比如Envoy nginx )执行额外的L7策略(Health checks, service discovery, load balancing, mutual TLS),其开销比较大,主要体现在传统的TCP/IP协议栈路径比较冗余,导致其开销比较大;就像同一主机上unix
阅读全文
摘要:通过代理服务器在两个TCP接连之间转发数据是一个常见的需求,然后通常部署的时候涉及到(虚拟)服务器、真实服务器、防护设备。涉及到多个ip地址相关联,改动一个IP就需要修改配置。 比如反向服务器部署的时候, 真实服务器ip 改动就会联动反向代理关系改动,比较麻烦。所以当然是将真实服务器Ip 对外最好,
阅读全文
摘要:读ngx 的一个问题? //这里应该再重新接收一次和NGINX一样,等待下一次循环(epoll)再进行,同时设置读写句柄,以便下次读取的时候直接进行握手 //单向认证四次握手过程还没有完成,需要继续握手 if (sslerr == SSL_ERROR_WANT_READ) { //# define
阅读全文
摘要:if (c->read->ready) { ngx_http_upstream_process_header(r, u); //读事件触发 准备处理http头部信息 return; } 向上游服务器发送数据完毕后就会检测是否收到上游服务器的响应: static void ngx_http_upstr
阅读全文
摘要:每次客户端有可读数据触发时,优先检测是否还有数据没有发送,如果有则发送数据,然后在读取client数据 //向后端发送请求的调用过程 //ngx_http_upstream_send_request_body->ngx_output_chain->ngx_chain_writer static ng
阅读全文
摘要:向上游服务器发送请求处理 static void ngx_http_upstream_send_request(ngx_http_request_t *r, ngx_http_upstream_t *u, ngx_uint_t do_write) //向上游服务器发送请求 当一次发送不完,通过ngx
阅读全文
摘要:代理模式数据流处理: //配置proxy_pass后,在 ngx_http_core_content_phase 里面指向该函数 /* 那么,当有请求访问到特定的location的时候(假设这个location配置了proxy_pass指令), 跟其他请求一样,会调用各个phase的checker和
阅读全文
摘要:转载:https://initphp.blog.csdn.net/article/details/51911189 一、Nginx的配置文件nginx.conf Nginx的配置文件每一行就是一条命令。 最外层的为核心模块的配置参数(类型:NGX_CORE_MODULE);内部嵌套的为各个子模块的配
阅读全文
摘要:ngx_init_cycle for (i = 0; ngx_modules[i]; i++) { if (ngx_modules[i]->type != NGX_CORE_MODULE) { continue; } module = ngx_modules[i]->ctx; if (module-
阅读全文
摘要:根据perf 工具可以看到目前引擎问题主要是: 内核协议栈以及软中断问题;细分的话 就是 自旋锁、cache-misses、cs 进程上下文切换 1、应用层目前预计只能从数据结构优化; 比如使用haproxy的ebtree经行优化。但是 我们使用了fdtable ,所以无用。ebtree(见http
阅读全文
摘要:今天在新入职的公司处理waf 的问题时,突然看到了一个tcp状态close-wait 想一想 close-wait 是怎样产生的???? 被动收到FIN 关闭请求,协议栈主动发出ACK, 等待 本端主动发出 FIN,但是本端一直没有执行CLOSE。也就是在被动关闭连接情况下,在已经接收到FIN,但是
阅读全文
摘要:https://cloud.tencent.com/developer/article/1150971 前言 说到TCP协议,相信大家都比较熟悉了,对于TCP协议总能说个一二三来,但是TCP协议又是一个非常复杂的协议,其中有不少细节点让人头疼点。本文就是来说说这些头疼点的,浅谈一些TCP的疑难杂症。
阅读全文
摘要:如何优雅的关闭关闭这个fd , 如果只是一个简单的fd 直接调用close 就行, 但是如果要是一个框架 那就接到 资源回收复用 内存泄漏等问题; 来看看 ngx 是用怎样的思路处理 事务结束动作; 每个HTTP请求都有一个引用计数,每派生出一种新的会独立向事件收集器注册事件的动作时(如ngx_ht
阅读全文
摘要:在解析完 http 请求报文后, 需要发出响应报文, 那么ngx 框架 提供了那些通用接口呢?如果自己设计将所用的模块的响应接口合并起来 你会怎么设计呢?? 响应头过滤函数主要的用处就是处理HTTP响应的头,可以根据实际情况对于响应头进行修改或者添加删除。 响应头过滤函数先于响应体过滤函数,而且只调
阅读全文
摘要:HTTP 处理数据包, 有的业务不需要,此时只需要将数据包文读取后丢弃, 但是ngx 为什么还要提供一个丢弃接口呢???解决了什么问题?? 对于HTTP模块而言,放弃接收包体就是简单地不处理包体了,可是对于HTTP框架而言,并不是不接收包体就可以的。因为对于客户端而言,通常会调用一些阻塞的发送方法来
阅读全文
摘要:HTTP包体的长度有可能非常大,不同业务可能对包体读取 处理不相同, 比如waf, 也许会读取body内容或者只是读取很少的前几十字节。所以根据不同业务特性,对http body 数据包处理方式不同,nginx核心本身不会主动读取请求体,这个工作是交给请求处理阶段的模块处理,ngx 里面目前提供了接
阅读全文
摘要:在处理完http的头部信息后 然后在 处理request-body信息ngx_http_process_request ngx_http_process_request_headers(ngx_http_process_request_header)头部行解析完毕后调用函数ngx_http_proc
阅读全文
摘要:简要而说:accept 到连接后 根据fd 构建一个connection 由于是 http ; 重新封装为http-connection;同时设置fd的读回调; 回调函数根据是否是https/http 进行区别 ngx_http_init_connection(ngx_connection_t *c
阅读全文