static ngx_int_t
ngx_http_access_handler(ngx_http_request_t *r)
{//NGX_HTTP_ACCESS_PHASE的一部分,进行访问权限控制,很简单。
    struct sockaddr_in          *sin;
    ngx_http_access_loc_conf_t  *alcf;
    alcf = ngx_http_get_module_loc_conf(r, ngx_http_access_module);//获取ngx_http_access_module模块在r中的配置。此处的r指的是当时对应的loc
#if (NGX_HAVE_INET6)
    if (alcf->rules6 && r->connection->sockaddr->sa_family == AF_INET6) {
        u_char               *p;
        in_addr_t             addr;
        struct sockaddr_in6  *sin6;
        sin6 = (struct sockaddr_in6 *) r->connection->sockaddr;
        p = sin6->sin6_addr.s6_addr;
        if (IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr)) {
            addr = p[12] << 24;
            addr += p[13] << 16;
            addr += p[14] << 8;
            addr += p[15];
            return ngx_http_access_inet(r, alcf, htonl(addr));
        }
        return ngx_http_access_inet6(r, alcf, p);
    }
#endif

    if (alcf->rules && r->connection->sockaddr->sa_family == AF_INET) {
        sin = (struct sockaddr_in *) r->connection->sockaddr;
        return ngx_http_access_inet(r, alcf, sin->sin_addr.s_addr);//根据配置的access指令,和其IP掩码判断客户端IP是否在禁止列表里面。
    }

    return NGX_DECLINED;
}
static ngx_int_t
ngx_http_access_handler(ngx_http_request_t *r)
{
    struct sockaddr_in          *sin;
    ngx_http_access_loc_conf_t  *alcf;
#if (NGX_HAVE_INET6)
    u_char                      *p;
    in_addr_t                    addr;
    struct sockaddr_in6         *sin6;
#endif

    alcf = ngx_http_get_module_loc_conf(r, ngx_http_access_module);

    switch (r->connection->sockaddr->sa_family) {

    case AF_INET:
        if (alcf->rules) {
            sin = (struct sockaddr_in *) r->connection->sockaddr;
            return ngx_http_access_inet(r, alcf, sin->sin_addr.s_addr);
        }
        break;

#if (NGX_HAVE_INET6)

    case AF_INET6:
        sin6 = (struct sockaddr_in6 *) r->connection->sockaddr;
        p = sin6->sin6_addr.s6_addr;

        if (alcf->rules && IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr)) {
            addr = p[12] << 24;
            addr += p[13] << 16;
            addr += p[14] << 8;
            addr += p[15];
            return ngx_http_access_inet(r, alcf, htonl(addr));
        }

        if (alcf->rules6) {
            return ngx_http_access_inet6(r, alcf, p);
        }

        break;

#endif

#if (NGX_HAVE_UNIX_DOMAIN)

    case AF_UNIX:
        if (alcf->rules_un) {
            return ngx_http_access_unix(r, alcf);
        }

        break;

#endif
    }

    return NGX_DECLINED;
}