流程:
-- 调用ngx_http_upstream_init
-- 将客户端连接的读事件从定时器中移除
-- 设置检查nginx与下游客户端连接状态的方法
-- 调用HTTP模块实现的create_request方法
-- 将ngx_http_upstream_cleanup方法添加到cleanup链表
-- 调用ngx_http_upstream_connect方法
-- 调用ngx_http_upstream_connect,与上游服务器建立连接
-- 由空闲连接池中获取ngx_connection_t结构体
-- 将连接对应的套接字添加到epoll中来监控读/写事件
-- 建立连接,设置读写事件的回调方法:ngx_http_upstream_handler
-- 设置读写处理方法:ngx_http_upstream_send_request_handler(write_event_handler),ngx_http_upstream_process_header(read_event_handler).
-- 如果建立连接,则调用ngx_http_upstream_send_request发送请求
--
-- 上游连接读写事件处理:ngx_http_upstream_handler
-- 读事件处理:ngx_http_upstream_process_header
-- 读取数据
-- 如果对于正常的连接,读取数据时返回0,代表对端已经关闭
-- 解析响应头部
-- 调用自己设置的钩子函数process_header,如果process_header函数没有返回NGX_AGAIN,则表示不再需要继续解析(头部解析完成就不再需要继续解析)
-- 调用ngx_http_upstream_process_headers函数,将upstream读到的headers_in中的数据链接到原始请求的headers_out上,修改u->content_length
-- 是否需要转发(subrequest_in_memory)
-- 是,直接发送响应(ngx_http_upstream_send_response)
-- 调用ngx_http_send_header发送头部
-- 、、、
-- 调用ngx_http_top_header_filter(对于默认的包含ngx_http_header_filter_module的nginx,此处调用ngx_http_head_filter,这个函数指针由该模块的postconfiguration设置)
-- \\\
-- 发送完成后,调用ngx_http_upstream_finalize_request
-- 否,调用input_filter方法处理接收到的包体,并把read_event_handler设置为ngx_http_upstream_process_body_in_memory
*************************************************
--- 设置回调方法
必须实现的3个:
-- create_request(框架在初始化upstream时自动调用)
-- process_header(读到数据后自动调用)
-- finalize_request
可选的5个方法:
-- input_filter_init
-- input_filter
-- reinit_request
-- abort_request
-- rewrite_redirect
--- upstream机制启动
直接执行ngx_http_upstream_init方法启动upstream,所以也一般在handler中进行启动
阅读(1411) | 评论(0) | 转发(0) |