Единственно что - я не придумал ничего лучше чем вставить регистрацию
cleanup процедуры в фильтр тела ответа, по флагу. Я не нашёл способа,
как получить request_t где-нибудь в инциализации или создании conf.
Может есть лучшее место?
-------
if (!conf->is_finish_inited)
{
cln = ngx_http_cleanup_add(r, 0);
if (cln == NULL) {
ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
return NGX_ERROR;
}
cln->handler = ngx_http_request_stats_cleanup;
cln->data = r;
conf->is_finish_inited = 1;
}
----------
Флаг должен быть не в конфигурации, а в конексте самого запроса.
Использование контекста можно посмотреть, например, в charset, gzip, userid:
ngx_http_get_module_ctx();
ngx_http_set_ctx();
И ещё вопрос - у cleanup процедуры есть какие-либо обязательства? Т.е.
там нужно вызывать цепочку дальше, или нет? Если нужно, то где взять
статус завершения, для вызова ngx_http_finalize_request?
Нет, никаких обязательств нет, только return.
Игорь Сысоев
http://sysoev.ru