Example #1
0
static char *
ngx_http_v2_init_main_conf(ngx_conf_t *cf, void *conf)
{
    ngx_http_v2_main_conf_t *h2mcf = conf;

    ngx_conf_init_size_value(h2mcf->recv_buffer_size, 256 * 1024);

    return NGX_CONF_OK;
}
Example #2
0
//参考:
//http://blog.csdn.net/livelylittlefish/article/details/7262750
static char *
ngx_core_module_init_conf(ngx_cycle_t *cycle, void *conf)
{
    ngx_core_conf_t  *ccf = conf;

    //初始化daemon、master等
    ngx_conf_init_value(ccf->daemon, 1);
    ngx_conf_init_value(ccf->master, 1);
    ngx_conf_init_msec_value(ccf->timer_resolution, 0);

    ngx_conf_init_value(ccf->worker_processes, 1);
    ngx_conf_init_value(ccf->debug_points, 0);

#if (NGX_HAVE_SCHED_SETAFFINITY)

    if (ccf->cpu_affinity_n
        && ccf->cpu_affinity_n != 1
        && ccf->cpu_affinity_n != (ngx_uint_t) ccf->worker_processes)
    {
        ngx_log_error(NGX_LOG_WARN, cycle->log, 0,
                      "number of the \"worker_processes\" is not equal to "
                      "the number of the \"worker_cpu_affinity\" mask, "
                      "using last mask for remaining worker processes");
    }

#endif

#if (NGX_THREADS)

    ngx_conf_init_value(ccf->worker_threads, 0);
    ngx_threads_n = ccf->worker_threads;
    ngx_conf_init_size_value(ccf->thread_stack_size, 2 * 1024 * 1024);

#endif

    //初始化pid、oldpid
    if (ccf->pid.len == 0) {
        ngx_str_set(&ccf->pid, NGX_PID_PATH);
    }

    if (ngx_conf_full_name(cycle, &ccf->pid, 0) != NGX_OK) {
        return NGX_CONF_ERROR;
    }

    ccf->oldpid.len = ccf->pid.len + sizeof(NGX_OLDPID_EXT);

    ccf->oldpid.data = ngx_pnalloc(cycle->pool, ccf->oldpid.len);
    if (ccf->oldpid.data == NULL) {
        return NGX_CONF_ERROR;
    }

    ngx_memcpy(ngx_cpymem(ccf->oldpid.data, ccf->pid.data, ccf->pid.len),
               NGX_OLDPID_EXT, sizeof(NGX_OLDPID_EXT));


#if !(NGX_WIN32)
    //初始化username,user,group
    if (ccf->user == (uid_t) NGX_CONF_UNSET_UINT && geteuid() == 0) {
        struct group   *grp;
        struct passwd  *pwd;

        ngx_set_errno(0);
        pwd = getpwnam(NGX_USER);
        if (pwd == NULL) {
            ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
                          "getpwnam(\"" NGX_USER "\") failed");
            return NGX_CONF_ERROR;
        }

        ccf->username = NGX_USER;
        ccf->user = pwd->pw_uid;

        ngx_set_errno(0);
        grp = getgrnam(NGX_GROUP);
        if (grp == NULL) {
            ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
                          "getgrnam(\"" NGX_GROUP "\") failed");
            return NGX_CONF_ERROR;
        }

        ccf->group = grp->gr_gid;
    }


    if (ccf->lock_file.len == 0) {
        ngx_str_set(&ccf->lock_file, NGX_LOCK_PATH);
    }
    
    //初始化lock_file
    if (ngx_conf_full_name(cycle, &ccf->lock_file, 0) != NGX_OK) {
        return NGX_CONF_ERROR;
    }

    {
    ngx_str_t  lock_file;

    lock_file = cycle->old_cycle->lock_file;

    if (lock_file.len) {
        lock_file.len--;

        if (ccf->lock_file.len != lock_file.len
            || ngx_strncmp(ccf->lock_file.data, lock_file.data, lock_file.len)
               != 0)
        {
            ngx_log_error(NGX_LOG_EMERG, cycle->log, 0,
                          "\"lock_file\" could not be changed, ignored");
        }
        
        //初始化ngx_cycle->lock_file
        cycle->lock_file.len = lock_file.len + 1;
        lock_file.len += sizeof(".accept");

        cycle->lock_file.data = ngx_pstrdup(cycle->pool, &lock_file);
        if (cycle->lock_file.data == NULL) {
            return NGX_CONF_ERROR;
        }

    } else {
        cycle->lock_file.len = ccf->lock_file.len + 1;
        cycle->lock_file.data = ngx_pnalloc(cycle->pool,
                                      ccf->lock_file.len + sizeof(".accept"));
        if (cycle->lock_file.data == NULL) {
            return NGX_CONF_ERROR;
        }

        ngx_memcpy(ngx_cpymem(cycle->lock_file.data, ccf->lock_file.data,
                              ccf->lock_file.len),
                   ".accept", sizeof(".accept"));
    }
    }

#endif

    return NGX_CONF_OK;
}
static char *
ngx_lua_session(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
    ngx_lua_session_conf_t *lscf = conf;

    ngx_str_t   *value, str;
    ngx_uint_t   i;

    if (lscf->mode != NGX_CONF_UNSET_UINT) {
        return "is duplicate";
    }

    value = cf->args->elts;

    for (i = 1; i < cf->args->nelts; i++) {

        if (ngx_strncmp(value[i].data, "mode=", 5) == 0) {
            str.len = value[i].len - 5;
            str.data = value[i].data + 5;

            if (ngx_strncmp(str.data, "single", 6) == 0) {
                lscf->mode = NGX_LUA_SESSION_MODE_SINGLE;

            } else if (ngx_strncmp(str.data, "cluster", 7) == 0) {
                lscf->mode = NGX_LUA_SESSION_MODE_CLUSTER;

            } else {
                goto invalid;
            }

            continue;
        }

        if (ngx_strncmp(value[i].data, "server=", 7) == 0) {
            lscf->server.len = value[i].len - 7;
            lscf->server.data = value[i].data + 7;
            continue;
        }

        if (ngx_strncmp(value[i].data, "name=", 5) == 0) {
            lscf->name.len = value[i].len - 5;
            lscf->name.data = value[i].data + 5;
            continue;
        }

        if (ngx_strncmp(value[i].data, "size=", 5) == 0) {
            str.len = value[i].len - 5;
            str.data = value[i].data + 5;

            lscf->size = ngx_parse_size(&str);
            if (lscf->size == (size_t) NGX_ERROR) {
                goto invalid;
            }

            continue;
        }

        goto invalid;
    }

    if (lscf->mode == NGX_CONF_UNSET_UINT) {
        ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
                           "the directive \"lua_session\" must be specified");
        return NGX_CONF_ERROR;
    }

    if (lscf->mode == NGX_LUA_SESSION_MODE_SINGLE) {
        if (lscf->name.data == NULL) {
            ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
                               "the directive \"lua_session\" "
                               "must be specified");
            return NGX_CONF_ERROR;
        }

        ngx_conf_init_size_value(lscf->size, 1024 * 1024 * 1);

        lscf->zone = ngx_shared_memory_add(cf, &lscf->name, lscf->size,
                                           &ngx_lua_session_module);
        if (lscf->zone == NULL) {
            return NGX_CONF_ERROR;
        }

        if (lscf->zone->data) {
            ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
                               "duplicate lua session name \"%V\"",
                               &lscf->name);
            return NGX_CONF_ERROR;
        }

        lscf->zone->init = ngx_lua_session_init;
        lscf->zone->data = lscf;

    } else {
        /* TODO: cluster */
    }

    return NGX_CONF_OK;

invalid:

    ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
                       "invalid parameter \"%V\" in lua_session", &value[i]);

    return NGX_CONF_ERROR;
}
static char *
ngx_lua_autorun(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
    ngx_lua_autorun_conf_t *lacf = conf;

    ngx_str_t   *value, str;
    ngx_uint_t   i;

    ngx_log_debug0(NGX_LOG_DEBUG_CORE, cf->log, 0, "lua autorun");

    if (lacf->name.data != NULL) {
        return "is duplicate";
    }

    value = cf->args->elts;

    for (i = 1; i < cf->args->nelts; i++) {

        if (ngx_strncmp(value[i].data, "name=", 5) == 0) {
            lacf->name.len = value[i].len - 5;
            lacf->name.data = value[i].data + 5;
            continue;
        }

        if (ngx_strncmp(value[i].data, "size=", 5) == 0) {
            str.len = value[i].len - 5;
            str.data = value[i].data + 5;
            lacf->size = ngx_parse_size(&str);
            if (lacf->size == (size_t) NGX_ERROR) {
                goto invalid;
            }
            continue;
        }

        goto invalid;
    }

    if (lacf->name.data == NULL) {
        ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
                           "the directive \"lua_autorun\" must be specified");
        return NGX_CONF_ERROR;
    }

    ngx_conf_init_size_value(lacf->size, 1024 * 1024 * 1);

    lacf->zone = ngx_shared_memory_add(cf, &lacf->name, lacf->size,
                                       &ngx_lua_autorun_module);
    if (lacf->zone == NULL) {
        return NGX_CONF_ERROR;
    }

    if (lacf->zone->data) {
        ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
                           "duplicate lua autorun name \"%V\"", &lacf->name);
        return NGX_CONF_ERROR;
    }

    lacf->zone->init = ngx_lua_autorun_init;
    lacf->zone->data = lacf;

    return NGX_CONF_OK;

invalid:

    ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
                       "invalid parameter \"%V\" in lua_autorun", &value[i]);

    return NGX_CONF_ERROR;
}
Example #5
0
static char *
ngx_core_module_init_conf(ngx_cycle_t *cycle, void *conf)
{
    ngx_core_conf_t  *ccf = conf;

#if (NGX_HAVE_CPU_AFFINITY)
    ngx_int_t         i, n;
    CPU_SET_T        *mask;
#endif

    if (!ccf->worker_processes) {
        ccf->worker_processes = NGX_CONF_UNSET;
    }

    ngx_conf_init_value(ccf->worker_processes, ngx_ncpu);

    ngx_conf_init_value(ccf->daemon, 1);
    ngx_conf_init_value(ccf->master, 1);
    ngx_conf_init_msec_value(ccf->timer_resolution, 0);
    ngx_conf_init_value(ccf->debug_points, 0);

#if (NGX_HAVE_CPU_AFFINITY)

    /* in default, disable cpu affinity */

    if (ccf->cpu_affinity_n == 0 && ccf->cpu_affinity == NULL) {
        ccf->cpu_affinity_n = 1;
    }

    if (ccf->cpu_affinity_n == 0) {

        n = ngx_ncpu - 1;

        if (ngx_ncpu > 0 && ngx_ncpu <= CPU_SETSIZE) {

            mask = ngx_palloc(cycle->pool,
                              ccf->worker_processes * sizeof(CPU_SET_T));
            if (mask == NULL) {
                return NGX_CONF_ERROR;
            }

            ccf->cpu_affinity_n = ccf->worker_processes;
            ccf->cpu_affinity = mask;

            /* RR for cpu assign */
            for (i = 0; i < ccf->worker_processes; i++) {
                CPU_ZERO(&mask[i]);
                CPU_SET(n, &mask[i]);
                if (--n < 0) {
                    n = ngx_ncpu - 1;
                }
            }

        } else {
            ccf->cpu_affinity_n = 0;
            ccf->cpu_affinity = NULL;
        }
    }

    if (ccf->cpu_affinity_n
            && ccf->cpu_affinity_n != 1
            && ccf->cpu_affinity_n != (ngx_uint_t) ccf->worker_processes)
    {
        ngx_log_error(NGX_LOG_WARN, cycle->log, 0,
                      "the number of \"worker_processes\" is not equal to "
                      "the number of \"worker_cpu_affinity\" masks, "
                      "using last mask for remaining worker processes");
    }

#endif

#if (NGX_THREADS)

    ngx_conf_init_value(ccf->worker_threads, 0);
    ngx_threads_n = ccf->worker_threads;
    ngx_conf_init_size_value(ccf->thread_stack_size, 2 * 1024 * 1024);

#endif


    if (ccf->pid.len == 0) {
        ngx_str_set(&ccf->pid, NGX_PID_PATH);
    }

    if (ngx_conf_full_name(cycle, &ccf->pid, 0) != NGX_OK) {
        return NGX_CONF_ERROR;
    }

    ccf->oldpid.len = ccf->pid.len + sizeof(NGX_OLDPID_EXT);

    ccf->oldpid.data = ngx_pnalloc(cycle->pool, ccf->oldpid.len);
    if (ccf->oldpid.data == NULL) {
        return NGX_CONF_ERROR;
    }

    ngx_memcpy(ngx_cpymem(ccf->oldpid.data, ccf->pid.data, ccf->pid.len),
               NGX_OLDPID_EXT, sizeof(NGX_OLDPID_EXT));


#if !(NGX_WIN32)

    if (ccf->user == (uid_t) NGX_CONF_UNSET_UINT && geteuid() == 0) {
        struct group   *grp;
        struct passwd  *pwd;

        ngx_set_errno(0);
        pwd = getpwnam(NGX_USER);
        if (pwd == NULL) {
            ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
                          "getpwnam(\"" NGX_USER "\") failed");
            return NGX_CONF_ERROR;
        }

        ccf->username = NGX_USER;
        ccf->user = pwd->pw_uid;

        ngx_set_errno(0);
        grp = getgrnam(NGX_GROUP);
        if (grp == NULL) {
            ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
                          "getgrnam(\"" NGX_GROUP "\") failed");
            return NGX_CONF_ERROR;
        }

        ccf->group = grp->gr_gid;
    }


    if (ccf->lock_file.len == 0) {
        ngx_str_set(&ccf->lock_file, NGX_LOCK_PATH);
    }

    if (ngx_conf_full_name(cycle, &ccf->lock_file, 0) != NGX_OK) {
        return NGX_CONF_ERROR;
    }

    {
        ngx_str_t  lock_file;

        lock_file = cycle->old_cycle->lock_file;

        if (lock_file.len) {
            lock_file.len--;

            if (ccf->lock_file.len != lock_file.len
                    || ngx_strncmp(ccf->lock_file.data, lock_file.data, lock_file.len)
                    != 0)
            {
                ngx_log_error(NGX_LOG_EMERG, cycle->log, 0,
                              "\"lock_file\" could not be changed, ignored");
            }

            cycle->lock_file.len = lock_file.len + 1;
            lock_file.len += sizeof(".accept");

            cycle->lock_file.data = ngx_pstrdup(cycle->pool, &lock_file);
            if (cycle->lock_file.data == NULL) {
                return NGX_CONF_ERROR;
            }

        } else {
            cycle->lock_file.len = ccf->lock_file.len + 1;
            cycle->lock_file.data = ngx_pnalloc(cycle->pool,
                                                ccf->lock_file.len + sizeof(".accept"));
            if (cycle->lock_file.data == NULL) {
                return NGX_CONF_ERROR;
            }

            ngx_memcpy(ngx_cpymem(cycle->lock_file.data, ccf->lock_file.data,
                                  ccf->lock_file.len),
                       ".accept", sizeof(".accept"));
        }
    }

#endif

    return NGX_CONF_OK;
}
static char *
ngx_btt(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
    ngx_btt_conf_t *bcf = conf;

    ngx_str_t   *value, str;
    ngx_uint_t   i;

    if (bcf->name.data != NULL) {
        return "is duplicate";
    }

    value = cf->args->elts;

    for (i = 1; i < cf->args->nelts; i++) {

        if (ngx_strncmp(value[i].data, "name=", 5) == 0) {
            bcf->name.len = value[i].len - 5;
            bcf->name.data = value[i].data + 5;
            continue;
        }

        if (ngx_strncmp(value[i].data, "size=", 5) == 0) {
            str.len = value[i].len - 5;
            str.data = value[i].data + 5;
            bcf->size = ngx_parse_size(&str);
            if (bcf->size == (size_t) NGX_ERROR) {
                goto invalid;
            }
            continue;
        }

        if (ngx_strncmp(value[i].data, "expire=", 7) == 0) {
            str.len = value[i].len - 7;
            str.data = value[i].data + 7;
            bcf->expire = ngx_parse_time(&str, 1);
            if (bcf->expire == NGX_ERROR) {
                goto invalid;
            }
            continue;
        }

        if (ngx_strncmp(value[i].data, "interval=", 9) == 0) {
            str.len = value[i].len - 9;
            str.data = value[i].data + 9;
            bcf->interval = ngx_parse_time(&str, 1);
            if (bcf->interval == NGX_ERROR) {
                goto invalid;
            }
            continue;
        }

        goto invalid;
    }

    if (bcf->name.data == NULL) {
        ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
                           "the directive \"btt\" must be specified");
        return NGX_CONF_ERROR;
    }

    ngx_conf_init_size_value(bcf->size, 1024 * 1024 * 10);
    ngx_conf_init_value(bcf->expire, 60);
    ngx_conf_init_value(bcf->interval, 30);

    bcf->zone = ngx_shared_memory_add(cf, &bcf->name, bcf->size,
                                      &ngx_lua_btt_module);
    if (bcf->zone == NULL) {
        return NGX_CONF_ERROR;
    }

    if (bcf->zone->data) {
        ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
                           "duplicate btt name \"%V\"", &bcf->name);
        return NGX_CONF_ERROR;
    }

    bcf->zone->init = ngx_btt_init;
    bcf->zone->data = bcf;

    return NGX_CONF_OK;

invalid:

    ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
                       "invalid parameter \"%V\" in btt", &value[i]);

    return NGX_CONF_ERROR;
}