Chinaunix首页 | 论坛 | 博客
  • 博客访问: 224332
  • 博文数量: 41
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 407
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-27 13:42
文章分类

全部博文(41)

文章存档

2016年(1)

2015年(18)

2014年(22)

我的朋友

分类: C/C++

2014-09-07 14:10:37

流程:
    -- 调用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中进行启动

阅读(1340) | 评论(0) | 转发(0) |
0

上一篇:nginx主体流程

下一篇:epoll工作模式

给主人留下些什么吧!~~