При ошибке в ngx_http_output_filter() в конце вызывается
ngx_http_finalize_request(r, rc), то есть, должно работать.
Я правильно понимаю, что в данной версии при ошибке в логах
"sendfile() failed (32: Broken pipe) while sending response to client"
или
"... Connection reset by peer) while sending response to client"
post_action не вызывается ?
именно! возможно есть еще какие-то скрытые места... но их уже не
отследить, я просто не могу породить такую же ошибку, как клиенты в
реале, а запускать полный дебаг на рабочий сервер - это я не знаю, что с
ним станется :) если расскажете, как сделать эти две ошибки -
поэксперементирую!
В общем, как я и предполагал, ошибка при передаче клиенту не позволяет
в дальнейшем работать проксированным и FastCGI запросам. Нужно править там.
А вот и патч.
Игорь Сысоев
--- src/http/ngx_http_upstream.c Thu Feb 16 14:21:18 2006
+++ src/http/ngx_http_upstream.c Fri Feb 17 18:13:14 2006
@@ -283,8 +283,12 @@
ngx_del_timer(c->read);
}
- r->read_event_handler = ngx_http_upstream_rd_check_broken_connection;
- r->write_event_handler = ngx_http_upstream_wr_check_broken_connection;
+ if (!(r->http_version == NGX_HTTP_VERSION_9 && r->header_only)) {
+ /* not a post_action */
+
+ r->read_event_handler = ngx_http_upstream_rd_check_broken_connection;
+ r->write_event_handler = ngx_http_upstream_wr_check_broken_connection;
+ }
if (ngx_event_flags & NGX_USE_CLEAR_EVENT) {