I'm trying to use the ngx_http_catch_body_filter example to capture request bodies from post (etc.) requests.
I started with the example here in the hg repo: https://www.nginx.com/resources/wiki/extending/examples/body_filter/ I changed the config to make it a dynamic nginx module. I can see the `ngx_http_catch_body_init()` method getting called in the logs (I put an error log in that method). When I try a proxied POST or file upload, `ngx_http_catch_body_filter()` never gets called. Here's my modified source code and config. What am I doing wrong? ---- nginx.conf ---- ... load_module modules/ngx_http_catch_body_filter_module.so; ... location /app1/ { catch_body on; proxy_pass http://localhost:8180/java_test_app/; } ---- config ---- # (C) Maxim Dounin # Configuration for ngx_http_catch_body_filter_module. ngx_addon_name="ngx_http_catch_body_filter_module" #HTTP_MODULES="$HTTP_MODULES \ # ngx_http_catch_body_filter_module" NGX_ADDON_SRCS="$NGX_ADDON_SRCS \ $ngx_addon_dir/ngx_http_catch_body_filter_module.c" ngx_module_type=HTTP_AUX_FILTER ngx_module_srcs=$NGX_ADDON_SRCS ngx_module_name=$ngx_addon_name . auto/module ---- ngx_http_catch_body_filter_module.c ---- /* * Copyright (C) Maxim Dounin */ #include <ngx_config.h> #include <ngx_core.h> #include <ngx_http.h> #include <stddef.h> typedef struct { ngx_flag_t enable; } ngx_http_catch_body_conf_t; static void *ngx_http_catch_body_create_conf(ngx_conf_t *cf); static char *ngx_http_catch_body_merge_conf(ngx_conf_t *cf, void *parent, void *child); static ngx_int_t ngx_http_catch_body_init(ngx_conf_t *cf); static ngx_command_t ngx_http_catch_body_commands[] = { {ngx_string("catch_body"), NGX_HTTP_MAIN_CONF | NGX_HTTP_SRV_CONF | NGX_HTTP_LOC_CONF | NGX_CONF_FLAG, ngx_conf_set_flag_slot, NGX_HTTP_LOC_CONF_OFFSET, offsetof(ngx_http_catch_body_conf_t, enable), NULL}, ngx_null_command }; static ngx_http_module_t ngx_http_catch_body_module_ctx = { NULL, /* preconfiguration */ ngx_http_catch_body_init, /* postconfiguration */ NULL, /* create main configuration */ NULL, /* init main configuration */ NULL, /* create server configuration */ NULL, /* merge server configuration */ ngx_http_catch_body_create_conf, /* create location configuration */ ngx_http_catch_body_merge_conf /* merge location configuration */ }; ngx_module_t ngx_http_catch_body_filter_module = { NGX_MODULE_V1, &ngx_http_catch_body_module_ctx, /* module context */ ngx_http_catch_body_commands, /* 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 }; static ngx_http_request_body_filter_pt ngx_http_next_request_body_filter; static ngx_int_t ngx_http_catch_body_filter(ngx_http_request_t *r, ngx_chain_t *in) { ngx_log_error(NGX_LOG_NOTICE, r->connection->log, 0, "catch request body filter"); fprintf(stderr, "catch request body filter\n"); return ngx_http_next_request_body_filter(r, in); } static void * ngx_http_catch_body_create_conf(ngx_conf_t *cf) { ngx_http_catch_body_conf_t *conf; conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_catch_body_conf_t)); if (conf == NULL) { return NULL; } conf->enable = NGX_CONF_UNSET; return conf; } static char * ngx_http_catch_body_merge_conf(ngx_conf_t *cf, void *parent, void *child) { ngx_http_catch_body_conf_t *prev = parent; ngx_http_catch_body_conf_t *conf = child; ngx_conf_merge_value(conf->enable, prev->enable, 0); return NGX_CONF_OK; } static ngx_int_t ngx_http_catch_body_init(ngx_conf_t *cf) { ngx_log_error(NGX_LOG_NOTICE, cf->log, 0, "init catch request body filter"); ngx_http_next_request_body_filter = ngx_http_top_request_body_filter; ngx_http_top_request_body_filter = ngx_http_catch_body_filter; return NGX_OK; } Posted at Nginx Forum: https://forum.nginx.org/read.php?2,285923,285923#msg-285923 _______________________________________________ nginx mailing list [email protected] http://mailman.nginx.org/mailman/listinfo/nginx
