zoukankan      html  css  js  c++  java
  • Nginx得知——Hello World模

    

    Hello World HTTP模

    1.构造config

    ngx_addon_name=ngx_http_mytest_module

    HTTP_MODULES="$HTTP_MODULESngx_http_mytest_module"

    NGX_ADDON_SRCS="$NGX_ADDON_SRCS$ngx_addon_dir/ngx_http_mytest_module.c"

     

    2.ngx_http_mytest_module.c中定义mytest模块

    #include<ngx_config.h>
    
    #include<ngx_core.h>
    
    #include<ngx_http.h>
    
     
    
    static ngx_int_t ngx_http_mytest_handler(ngx_http_request_t* r);
    
    static char* ngx_http_mytest(ngx_conf_t* cf, ngx_command_t* cmd, void* conf);
    
     //用于定义模块的配置文件參数
    
    static ngx_command_t ngx_http_mytest_commonds[] = {
    
             { 
    
                       ngx_string("mytest"),
    
                       NGX_HTTP_MAIN_CONF | NGX_HTTP_SRV_CONF | NGX_HTTP_LOC_CONF |                      NGX_HTTP_LMT_CONF | NGX_CONF_NOARGS,
    
                       ngx_http_mytest,
    
                       NGX_HTTP_LOC_CONF_OFFSET,
    
                       0,
    
                       NULL
    
             }
    
             ngx_null_command
    
    };
    
     
    //指向ngx_http_module接口(HTTP框架要求)
    static ngx_http_module ngx_http_mytest_module_ctx = {
    
             NULL,
    
             NULL,
    
             NULL,
    
             NULL,
    
             NULL,
    
             NULL,
    
             NULL,
    
             NULL
    
    };
    
     
    
     
    //定义mytest模块
    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
    
    };
    
     <span style="font-family:Calibri;">//当在某个配置块中出现mytest配置项时。nginx会调用ngx_http_mytest方法
    static char* ngx_http_mytest(ngx_conf_t* cf, ngx_command_t* cmd, void* conf)
    
    {
    
             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;
    
    }
    </span>
    //在这里处理用户请求,并发送响应
    static ngx_int_t ngx_http_mytest_handler(ngx_http_request_t* r)
    
    {
    
             if(!(r->method & (NGX_HTTP_GET | NGX_HTTP_HEAD))){
    
                       return NGX_HTTP_NOT_ALLOWED;
    
             }
    
     
    
             ngx_int_t rc = ngx_http_discard_request_body(r);
    
             if(rc != NGX_OK){
    
                       return rc;
    
             }
    
     
    
             ngx_str_t type = ngx_string("text/plain");
    
             ngx_str+t response = ngx_string("Hello World!");
    
             r->headers_out.status= NGX_HTTP_OK;
    
             r->headers_out.content_length_n = response.len;
    
             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_create_temp_buf(r->pool, response.len);
    
             if(b == NULL){
    
                       return NGX_HTTP_INTERNAL_SERVER_ERROR;
    
             }
    
     
    
             ngx_memcpy(b->pos, response.data, response.len);
    
             b->last = b->pos + response.len;
    
             b->last_buf = 1;
    
     
    
             ngx_chain_t out;
    
             out.buf = b;
    
             out.next = NULL;
    
     
    
             return ngx_http_output_filter(r, &out);
    
    }
    




     

    3.ngx.confhttp里面默认的server中增加例如以下配置

    location /test{

    mytest;

    }

     

    4.编译安装nginx

    ./configure --add-module=/home/chen123/nginx/exp2 黄色区域为configngx_http_mytest_module.c的安装文件夹)

    make

    sudo make install

     

    5.启动nginx

    sudo /usr/local/nginx/sbin/nginx

     

    6.显示结果例如以下:

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    8常用控件
    7对话框
    6控件
    5Lambda表达式
    4自定义信号和槽函数
    3信号与槽
    2指定父对象
    springboot整合activemq
    springboot整合springtask
    jvm与tomcat启动优化配置
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4886942.html
Copyright © 2011-2022 走看看