По работе пришлось дописывать модуль для nginx, никогда раньше подобным не занимался, поэтому возникла проблема, гугление сорцов nginx не дает результата. На данном этапе у меня происходит следующая ситуация, есть location с директивой proxy_pass, я в тот же location дописываю некую свою директиву и случается следующее. Переход на этот location кидает в мой обработчик, а мой обработчик уже внутри себя вызывает обработчик proxy_pass и следит за состоянием. Если 404 или какая-другая ошибка, то ничего не делаем. Если все ок, то совершаем действие. Но тут nginx возвращает какие-то странные результаты.
Ниже приведен лог, который пишет мой хендлер, nginx запускался с нулевым кешем!
http://pastebin.mozilla.org/7971626
Данные в логи имет следующую структуру:
2014/12/13 14:35:39 [debug] 5649#0: *1 REQUEST PREPROXY HANDLER: /1.jpg //это на какой URL пришел запрос
2014/12/13 14:35:39 [debug] 5649#0: *1 PROXY CODE: -4 //какой ngx_int_t вернула обработчик proxy_pass
2014/12/13 14:35:39 [debug] 5649#0: *1 RESPONSE PREPROXY HANDLER: 0 //r->headers_out.status после вызова proxy_pass обработчика
Если интересно, то вот код непостредственно обработчика
ngx_int_t ngx_http_proxy_uri_save_mem_tree_handler(ngx_http_request_t* r){
ngx_http_cache_purge_loc_conf_t *cplcf;
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "REQUEST PREPROXY HANDLER: %V", &(r->uri));
cplcf = ngx_http_get_module_loc_conf(r, ngx_http_cache_purge_module);
ngx_int_t code = cplcf->proxy_handler(r);
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "PREPROXY PROXY CODE: %d", code);
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "RESPONSE PREPROXY HANDLER: %d", r->headers_out.status);
return code;
}
Мне непонятно следующее, почему nginx пишет в заголовок то 200, то 304. Видно что запрос на /1.jpg первый раз вернул 0, а затем сразу стал возвращать 304, а /1.gif первый раз вернул 0, а затем всегда 200. Также не понятно почему функция всегда возвращает -4. Что это вообще за -4? Искал в исходниках - ничего, не понятно что это значит.
Большое спасибо