Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

HTTP模块

核心模块阶段


flowchart TD
    subgraph POST_READ
        realip(realip)
    end
    subgraph SERVER_REWRITE
        rewrite(rewrite)
    end
    subgraph FIND_CONFIG
        NULL(NULL)
    end
    subgraph REWRITE
        rewrite2(rewrite)
    end
    subgraph POST_REWRITE
        NULL2(NULL)
    end
    subgraph PREACCESS
        direction LR
        degradation(degradation) --> limit_conn(limit_conn)
        limit_conn --> limit_req(limit_req)
        limit_req --> realip2(realip)
    end
    subgraph ACCESS
        direction LR
        access(access) --> auth(auth)
    end
    subgraph POST_ACCESS
        NULL3(NULL)
    end
    subgraph PRECONTENT
        direction LR
        mirror(mirror) --> try_files(try_files)
    end
    subgraph CONTENT
        direction LR
        static(static) --> gzip_static(gzip_static)
        gzip_static --> dav(dav)
        dav --> autoindex(autoindex)
        autoindex --> index(ndex)
        index --> random_index(random_index)
    end
    subgraph LOG
        log(log)
    end
POST_READ --> SERVER_REWRITE
SERVER_REWRITE --> FIND_CONFIG
FIND_CONFIG --> REWRITE
REWRITE --> POST_REWRITE
POST_REWRITE --> PREACCESS
PREACCESS --> ACCESS
ACCESS --> POST_ACCESS
POST_ACCESS --> PRECONTENT
PRECONTENT --> CONTENT
CONTENT --> LOG

  • POST_REWRITE阶段如果有rewrite,则会跳回到FIND_CONFIG阶段

  • 源代码中定义,如下图所示: http_phase图

FastCGI模块


sequenceDiagram
    actor n as nginx进程
    actor c as CGI进程
    n->>c: begin_request处理开始
    n->>c: params请求参数
    n->>+c: stdin请求数据内容
    c->>c:请求处理
    c-->>-n: stdout处理结果
    c-->>n: end_request处理结束

static模块


把请求url中path映射本地路径,读取本地文件返回客户端

核心源代码,如下图所示: static_module图

index模块


引入配置参数index,如下图所示: index_command图

请求url为目录时,把配置参数index值附加在url上,然后内部转跳



static ngx_int_t
ngx_http_index_handler(ngx_http_request_t *r)
{
    ...
    if (index[i].name.data[0] == '/') {
                return ngx_http_internal_redirect(r, &index[i].name, &r->args);
            }
    ...

    ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
                       "open index \"%V\"", &path);

    ...
    return ngx_http_internal_redirect(r, &uri, &r->args);
}

转跳调试日志,如下图所示: index_redirect图