要在NGINX中获取HTTP请求中的自定义字段,可以使用C代码来实现。以下是一个示例代码:

#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>

static ngx_int_t ngx_http_custom_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v, uintptr_t data);

static ngx_http_variable_t ngx_http_custom_variables[] = {
    { ngx_string("custom_field"), NULL, ngx_http_custom_variable, 0, NGX_HTTP_VAR_CHANGEABLE, 0 },
    { ngx_null_string, NULL, NULL, 0, 0, 0 }
};

static ngx_int_t ngx_http_custom_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v, uintptr_t data) {
    // 获取请求头中的自定义字段
    ngx_table_elt_t *h = NULL;
    ngx_list_part_t *part = &r->headers_in.headers.part;
    ngx_uint_t i;
    
    // 遍历请求头中的字段列表
    for (i = 0; ; i++) {
        if (part->elts == NULL) {
            break;
        }
        
        h = &part->elts[i];
        if (h->hash == 0) {
            continue;
        }
        
        // 检查字段名称
        if (ngx_strcasecmp(h->key.data, (u_char *) "custom-field") == 0) {
            // 在这里可以对字段值进行处理,例如转换成大写字母
            v->len = h->value.len;
            v->data = h->value.data;
            v->valid = 1;
            v->no_cacheable = 0;
            v->not_found = 0;
            return NGX_OK;
        }
    }
    
    // 如果没有找到自定义字段,则返回空值
    v->not_found = 1;
    return NGX_OK;
}

static ngx_int_t ngx_http_custom_variable_init(ngx_conf_t *cf) {
    ngx_http_variable_t *var, *v;
    
    for (v = ngx_http_custom_variables; v->name.len; v++) {
        var = ngx_http_add_variable(cf, &v->name, v->flags);
        if (var == NULL) {
            return NGX_ERROR;
        }
        
        var->get_handler = v->get_handler;
        var->data = v->data;
    }
    
    return NGX_OK;
}

static ngx_http_module_t ngx_http_custom_variable_module_ctx = {
    NULL,                                  /* preconfiguration */
    ngx_http_custom_variable_init,         /* postconfiguration */
    NULL,                                  /* create main configuration */
    NULL,                                  /* init main configuration */
    NULL,                                  /* create server configuration */
    NULL,                                  /* merge server configuration */
    NULL,                                  /* create location configuration */
    NULL                                   /* merge location configuration */
};

ngx_module_t ngx_http_custom_variable_module = {
    NGX_MODULE_V1,
    &ngx_http_custom_variable_module_ctx,  /* module context */
    ngx_http_custom_variables,             /* module directives */
    NGX_HTTP_MODULE,                       /* module type */
    NULL,                                  /* init master */
    NULL,                                  /* init module */
    NULL,                                  /* init process */
    NULL,                                  /* init thread */
    NULL,                                  /* exit thread */
    NULL,                                  /* exit process */
    NULL,                                  /* exit master */
    NGX_MODULE_V1_PADDING
};

请注意,以上代码中的自定义字段名称为“custom-field”,你可以根据实际情况进行修改。在NGINX配置文件中添加以下内容来启用自定义字段:

http {
    ...
    variables_hash_max_size 1024;
    variables_hash_bucket_size 64;
    ...
    server {
        ...
        location / {
            ...
            add_header X-Custom-Field $custom_field;
            ...
        }
        ...
    }
    ...
}

最后,重新编译并安装NGINX,然后重启NGINX服务。当接收到HTTP请求时,你可以在响应头中看到自定义字段的值

nginx 获取http请求中自定义字段C代码实现

原文地址: https://www.cveoy.top/t/topic/iQcW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录