# HG changeset patch # User Igor Sysoev # Date 1159206589 0 # Node ID d8d7c39e3a76e45d11609f2f3a0b648358d07f46 # Parent cbd18f0133851344f47eebc6281d24efd6033347 allowing handling 400 errors via proxy_pass diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c --- a/src/http/ngx_http_core_module.c +++ b/src/http/ngx_http_core_module.c @@ -514,12 +514,7 @@ ngx_http_handler(ngx_http_request_t *r) } else { r->lingering_close = 0; } - } - - r->valid_unparsed_uri = 1; - r->valid_location = 1; - - if (!r->internal) { + r->phase_handler = 0; } else { @@ -527,6 +522,12 @@ ngx_http_handler(ngx_http_request_t *r) r->phase_handler = cmcf->phase_engine.server_rewrite_index; } + if (r->unparsed_uri.len) { + r->valid_unparsed_uri = 1; + } + + r->valid_location = 1; + r->write_event_handler = ngx_http_core_run_phases; ngx_http_core_run_phases(r); } diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c --- a/src/http/ngx_http_request.c +++ b/src/http/ngx_http_request.c @@ -979,7 +979,7 @@ ngx_http_read_request_header(ngx_http_re c->error = rev->error; c->log->action = "sending response to client"; - ngx_http_finalize_request(r, NGX_HTTP_BAD_REQUEST); + ngx_http_finalize_request(r, NGX_HTTP_CLIENT_CLOSED_REQUEST); return NGX_ERROR; } diff --git a/src/http/ngx_http_special_response.c b/src/http/ngx_http_special_response.c --- a/src/http/ngx_http_special_response.c +++ b/src/http/ngx_http_special_response.c @@ -299,6 +299,9 @@ static ngx_str_t error_pages[] = { }; +static ngx_str_t ngx_http_get_name = { 3, "GET " }; + + ngx_int_t ngx_http_special_response_handler(ngx_http_request_t *r, ngx_int_t error) { @@ -364,6 +367,7 @@ ngx_http_special_response_handler(ngx_ht r->err_status = err_page[i].overwrite; r->method = NGX_HTTP_GET; + r->method_name = ngx_http_get_name; uri = &err_page[i].uri;