随笔分类 - http&server&业务
http Server 四层 七层
udp 业务
摘要:
阅读全文
摘要:upstream直接转发响应时的具体处理流程,主要是上面subrequest_memory为1的场景,此时该请求属于一个子请求。分析默认的input_filter的处理方法,如果读取包头时同时读到了包体信息,会调用input_filter方法处理: /* 将u->buffer.last - u->b
阅读全文
摘要:Nginx访问上游服务器的流程大致分以下几个阶段:启动upstream、连接上游服务器、向上游发送请求、接收上游响应(包头/包体)、结束请求。 upstream相关的两个重要数据结构ngx_http_upstream_t和ngx_http_upstream_conf_t /* upstream有3种
阅读全文
摘要:ngx_http_process_request如果设置了定时器则删除,既然所有的请求已经接收完毕,就不会再发生超时了 重设连接的读写回调函数 重设请求读事件回调函数 调用 ngx_http_handler 处理 HTTP 请求的 11 个阶段 调用 ngx_http_run_posted_requ
阅读全文
摘要:HTTP 请求行正确处理完成后,针对 HTTP/1.0 及以上版本紧接着要做的就是请求 HEADER 的处理与解析了 /** * 用于处理http的header数据 * 请求头: * Host: localhost * User-Agent: Mozilla/5.0 (Windows NT 5.1;
阅读全文
摘要:在 ngx_http_wait_request_handler 的最后调用了 ngx_http_process_request_line 函数用来处理和解析这次请求的全文 在读事件被触发时,内核套接字缓冲区的大小未必足够接收到全部的HTTP请求行;所以可能多次调用ngx_http_process_r
阅读全文
摘要:对于活跃的 HTTP 连接,在执行连接建立回调函数 ngx_http_init_connection 的过程中会执行 ngx_http_wait_request_handler 回调函数, 负责 HTTP 请求的接收与 HTTP 请求描述结构的创建和初始化,并且第一次读取客户端数据到数据。 因此当客
阅读全文
摘要:ECONNABORTED 该错误被描述为“software caused connection abort”,即“软件引起的连接中止”。原因在于当服务和客户进程在完成用于 TCP 连接的“三次握手”后,客户 TCP 却发送了一个 RST (复位)分节,在服务进程看来,就在该连接已由 TCP 排队,等
阅读全文
摘要:1. nginx 连接结构 ngx_connection_t 这个连接表示是客户端主动发起的、Nginx服务器被动接受的TCP连接,我们可以简单称其为被动连接。同时,在有些请求的处理过程中,Nginx会试图主动向其他上游服务器建立连接,并以此连接与上游服务器通信,因此,这样的连接与ngx_conne
阅读全文
摘要:nginx 将一个 HTTP 请求分为 11 个处理阶段,这样做让每一个 HTTP 模块可以仅仅专注于完成一个独立、简单的功能,而一个请求的完整处理过程可以由多个 HTTP 模块共同合作完成将一次 HTTP 请求划分为 11 个处理阶段,通过每个阶段内部多个 HTTP 模块流水式的处理请求 HTTP
阅读全文
摘要:在 http 配置块中,我们配置了 http 连接相关的信息,HTTP 框架也正是从这里启动的 在 nginx 初始化的过程中,执行了 ngx_init_cycle 函数,其中进行了配置文件解析,调用了 ngx_conf_parse 函数 函数 ngx_conf_handler 根据配置项的 com
阅读全文
摘要:tcp 三次握手成功后,listen fd 可读,在process_event_timer 中调用rev->handler(rev)处理; 其回调函数为: ngx_event_accept /* 如何建立新连接 上文提刭过,处理新连接事件的回调函数是ngx_event_accept,其原型如下。vo
阅读全文
摘要:1. epoll模块命令集 ngx_epoll_commands epoll模块上下文 ngx_epoll_module_ctx epoll模块配置 ngx_epoll_module static ngx_command_t ngx_epoll_commands[] = { /* 在调用epoll_
阅读全文
摘要:| (ngx_worker_process_cycle->ngx_worker_process_init) | >for(;;) {ngx_process_events_and_timers()} ngx_start_worker_processes | ngx_processes[]相关的操作赋值
阅读全文
摘要:1. event事件模块的配置 events { use epoll; worker_connections 1024; } event事件模块,配置分为两层:ngx_events_module 事件模块 和 ngx_event_core_module 事件核心模块。 ngx_events_modu
阅读全文
摘要:ngx_event.c :这个文件主要放置Nginx事件event模块的核心代码。 包含:进程事件分发器(ngx_process_events_and_timers)、事件模块的模块和配置、模块初始化/配置初始化等事件模块初始化的核心函数。 ngx_event_timer.c:定时器事件管理。主要放
阅读全文
摘要:Nginx服务器使用 master/worker 多进程模式。 主进程(Master process)启动后,会接收和处理外部信号; 主进程启动后通过fork() 函数产生一个或多个子进程(work process), 每个子进程会进行进程初始化、 模块调用以及对事件的接收和处理等工作。 主进程主要
阅读全文
摘要:转载自: http://www.cnhalo.net/2016/08/13/linux-tcp-nagle-cork/ http://abcdxyzk.github.io/blog/2018/07/08/kernel-nodelay_cork/ 糊涂窗口综合症(Silly Windw Syndrom
阅读全文
摘要:惊群:概念就不解释了。 直接说正题:惊群问题一般出现在那些web服务器上,Linux系统有个经典的accept惊群问题,这个问题现在已经在内核曾经得以解决,具体来讲就是当有新的连接进入到accept队列的时候,内核唤醒且仅唤醒一个进程来处理。 /* * The core wakeup functio
阅读全文
摘要:epoll_create:函数实现分析 /* * Open an eventpoll file descriptor. */ SYSCALL_DEFINE1(epoll_create1, int, flags) { int error, fd; struct eventpoll *ep = NULL
阅读全文

浙公网安备 33010602011771号