aboutsummaryrefslogtreecommitdiff
path: root/src/http/modules/proxy/ngx_http_proxy_upstream.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/http/modules/proxy/ngx_http_proxy_upstream.c')
-rw-r--r--src/http/modules/proxy/ngx_http_proxy_upstream.c54
1 files changed, 26 insertions, 28 deletions
diff --git a/src/http/modules/proxy/ngx_http_proxy_upstream.c b/src/http/modules/proxy/ngx_http_proxy_upstream.c
index 6bc11a25d..00a078009 100644
--- a/src/http/modules/proxy/ngx_http_proxy_upstream.c
+++ b/src/http/modules/proxy/ngx_http_proxy_upstream.c
@@ -70,41 +70,37 @@ int ngx_http_proxy_request_upstream(ngx_http_proxy_ctx_t *p)
}
r->request_body = rb;
- if (r->headers_in.content_length_n > 0) {
-
- if (!(tf = ngx_pcalloc(r->pool, sizeof(ngx_temp_file_t)))) {
- return NGX_HTTP_INTERNAL_SERVER_ERROR;
- }
+ if (r->headers_in.content_length_n <= 0) {
+ ngx_http_proxy_init_upstream(p);
+ return NGX_DONE;
+ }
- tf->file.fd = NGX_INVALID_FILE;
- tf->file.log = r->connection->log;
- tf->path = p->lcf->temp_path;
- tf->pool = r->pool;
- tf->warn = "a client request body is buffered to a temporary file";
- /* tf->persistent = 0; */
+ if (!(tf = ngx_pcalloc(r->pool, sizeof(ngx_temp_file_t)))) {
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
+ }
- rb->buf_size = p->lcf->request_buffer_size;
- rb->handler = ngx_http_proxy_init_upstream;
- rb->data = p;
- /* rb->bufs = NULL; */
- /* rb->buf = NULL; */
- /* rb->rest = 0; */
+ tf->file.fd = NGX_INVALID_FILE;
+ tf->file.log = r->connection->log;
+ tf->path = p->lcf->temp_path;
+ tf->pool = r->pool;
+ tf->warn = "a client request body is buffered to a temporary file";
+ /* tf->persistent = 0; */
- rb->temp_file = tf;
+ rb->buf_size = p->lcf->request_buffer_size;
+ rb->handler = ngx_http_proxy_init_upstream;
+ rb->data = p;
+ /* rb->bufs = NULL; */
+ /* rb->buf = NULL; */
+ /* rb->rest = 0; */
- rc = ngx_http_read_client_request_body(r);
+ rb->temp_file = tf;
- if (rc == NGX_AGAIN) {
- return NGX_DONE;
- }
+ rc = ngx_http_read_client_request_body(r);
- if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
- return rc;
- }
+ if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
+ return rc;
}
- ngx_http_proxy_init_upstream(p);
-
return NGX_DONE;
}
@@ -323,13 +319,15 @@ static void ngx_http_proxy_init_upstream(void *data)
r = p->request;
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
- "http proxy set timer: %d",
+ "http proxy init upstream, client timer: %d",
r->connection->read->timer_set);
if (r->connection->read->timer_set) {
ngx_del_timer(r->connection->read);
}
+ r->connection->read->event_handler = ngx_http_proxy_check_broken_connection;
+
if ((ngx_event_flags & (NGX_USE_CLEAR_EVENT|NGX_HAVE_KQUEUE_EVENT))
&& !r->connection->write->active)
{