Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Nginx学习——http配置项解析编程

http配置项解析编程配置configngx_addon_name=ngx_http_mytest_moduleHTTP_MODULES="$HTTP_MODULES ngx_http_mytest_module"NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_mytest_module.c"在nginx_http_mytest_module.c中定义mytest模块,使用预设方法解析test_flag,test_str,test_num配置项,使用自定义配置项处理方法解析mytest项。<pre class="cpp" name="code">#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>//create a structure
typedef struct{
        ngx_str_t my_str;
        ngx_int_t my_num;
        ngx_flag_t my_flag;
        ngx_str_t mytest_str;
        ngx_int_t mytest_num;
} ngx_http_mytest_conf_t; static char* ngx_conf_set_mytest(ngx_conf_t* cf, ngx_command_t* cmd, void* conf);
static ngx_int_t ngx_http_mytest_handler(ngx_http_request_t* r);static void* ngx_http_mytest_create_loc_conf(ngx_conf_t* cf);
static char* ngx_http_mytest_merge_loc_conf(ngx_conf_t* cf, void* parent, void* child);//set the resolution of configuration items
static ngx_command_t ngx_http_mytest_commands[] = {
        {
                //test_flag configuration item         
                ngx_string("test_flag"),
                NGX_HTTP_LOC_CONF | NGX_CONF_FLAG,
                ngx_conf_set_flag_slot,
                NGX_HTTP_LOC_CONF_OFFSET,
                offsetof(ngx_http_mytest_conf_t, my_flag),
                NULL
        },
        {
                //test_str configuration item
                ngx_string("test_str"),
                NGX_HTTP_SRV_CONF | NGX_HTTP_LOC_CONF | NGX_CONF_TAKE1,
                ngx_conf_set_str_slot,
                NGX_HTTP_LOC_CONF_OFFSET,
                offsetof(ngx_http_mytest_conf_t, my_str),
                NULL
        },
        {
                //test_num configuration item
                ngx_string("test_num"),
                NGX_HTTP_LOC_CONF | NGX_CONF_TAKE1,
                ngx_conf_set_num_slot,
                NGX_HTTP_LOC_CONF_OFFSET,
                offsetof(ngx_http_mytest_conf_t, my_num),
                NULL
        },
        {
                //mytest configuration item
                ngx_string("mytest"),
                NGX_HTTP_LOC_CONF | NGX_CONF_TAKE2,
                ngx_conf_set_mytest,
                NGX_HTTP_LOC_CONF_OFFSET,
                0,
                NULL
        },        ngx_null_command
};
static ngx_http_module_t ngx_http_mytest_module_ctx = {
        NULL,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL,
        ngx_http_mytest_create_loc_conf,        //create location configuration
        ngx_http_mytest_merge_loc_conf          //merge the loc configurations
};ngx_module_t ngx_http_mytest_module = {
        NGX_MODULE_V1,
        &ngx_http_mytest_module_ctx,
        ngx_http_mytest_commands,
        NGX_HTTP_MODULE,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL,
        NGX_MODULE_V1_PADDING
};static char* ngx_conf_set_mytest(ngx_conf_t* cf, ngx_command_t* cmd, void* conf)
{
        ngx_http_mytest_conf_t* mycf = conf;        ngx_str_t* value = cf->args->elts;        mycf->mytest_num = ngx_atoi(value[2].data, value[2].len);        mycf->mytest_str = value[1];
        ngx_http_core_loc_conf_t* clcf;
        clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
        clcf->handler = ngx_http_mytest_handler;        return NGX_CONF_OK;
}static ngx_int_t ngx_http_mytest_handler(ngx_http_request_t* r)
{
        //we response "GET" and "HEAD" requests only
        if(!(r->method & (NGX_HTTP_GET | NGX_HTTP_HEAD | NGX_HTTP_POST)))
        {
                return NGX_HTTP_NOT_ALLOWED;
        }
        //discard request body, since we don"t need it here
        ngx_int_t rc = ngx_http_discard_request_body(r);
        if(rc != NGX_OK){
                return rc;
        }        ngx_http_mytest_conf_t* my_conf;
        my_conf = ngx_http_get_module_loc_conf(r, ngx_http_mytest_module);        ngx_str_t type = ngx_string("text/plain");        u_char nginx_str_mytest[1024] = {0};
        ngx_sprintf(nginx_str_mytest,"test_str=%s,test_flag=%i,test_num=%i,mytest_str=%s,mytest_num=%i",my_conf->my_str.data,my_conf->my_flag,my_conf->my_num,my_conf->mytest_str.data,my_conf->mytest_num);        r->headers_out.status = NGX_HTTP_OK;
        r->headers_out.content_length_n = ngx_strlen(nginx_str_mytest);
        r->headers_out.content_type = type;        rc = ngx_http_send_header(r);
        if(rc == NGX_ERROR || rc>NGX_OK || r->header_only)
        {
                return rc;
        }        ngx_buf_t* b;
        b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
        if(b == NULL)
        {
                return NGX_HTTP_INTERNAL_SERVER_ERROR;
        }
        b->pos = nginx_str_mytest;
        b->last = nginx_str_mytest + ngx_strlen(nginx_str_mytest);
        b->memory = 1;
        b->last_buf = 1;        ngx_chain_t out;
        out.buf = b;
        out.next = NULL;        return ngx_http_output_filter(r, &out);
}static void* ngx_http_mytest_create_loc_conf(ngx_conf_t* cf)
{
        ngx_http_mytest_conf_t* conf;
        conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_mytest_conf_t));
        if(NULL == conf){
                return NGX_CONF_ERROR;
        }        conf->my_str.len = 0;
        conf->my_str.data = NULL;
        conf->my_num = NGX_CONF_UNSET;
        conf->my_flag = NGX_CONF_UNSET;
        return conf;
}static char* ngx_http_mytest_merge_loc_conf(ngx_conf_t* cf, void* parent, void* child)
{
        ngx_http_mytest_conf_t* prev = parent;
        ngx_http_mytest_conf_t* conf = child;
        ngx_conf_merge_str_value(conf->my_str, prev->my_str,"");        return NGX_CONF_OK;
}在ngx.conf中http下面默认server中加入如下配置项location /test{test_flag on;test_str "helloworld";test_num 88;mytest"hello" 88;}启动nginx./configure --add-module=/home/chen123/nginx/exp3makemake installsudo /usr/local/nginx/sbin/nginx结果如下CentOS 6.2实战部署Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm使用Nginx搭建WEB服务器 http://www.linuxidc.com/Linux/2013-09/89768.htm搭建基于Linux6.3+Nginx1.2+PHP5+MySQL5.5的Web服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htmCentOS 6.3下Nginx性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htmCentOS 6.3下配置Nginx加载ngx_pagespeed模块 http://www.linuxidc.com/Linux/2013-09/89657.htmCentOS 6.4安装配置Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htmNginx搭建视频点播服务器(仿真专业流媒体软件) http://www.linuxidc.com/Linux/2012-08/69151.htmNginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-07/103983.htm