diff options
author | Igor Sysoev <igor@sysoev.ru> | 2004-04-14 17:44:28 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2004-04-14 17:44:28 +0000 |
commit | b3968b314f063c42f983ba70becfb9fae97651f0 (patch) | |
tree | 49334a35d59b4491c62facced5f0bdef1e434343 /src/http/modules/proxy | |
parent | a3677248993cddbf6f406dccd313eda8759724fb (diff) | |
download | nginx-b3968b314f063c42f983ba70becfb9fae97651f0.tar.gz nginx-b3968b314f063c42f983ba70becfb9fae97651f0.zip |
nginx-0.0.3-2004-04-14-21:44:28 import
Diffstat (limited to 'src/http/modules/proxy')
-rw-r--r-- | src/http/modules/proxy/ngx_http_proxy_handler.c | 1 | ||||
-rw-r--r-- | src/http/modules/proxy/ngx_http_proxy_handler.h | 1 | ||||
-rw-r--r-- | src/http/modules/proxy/ngx_http_proxy_header.c | 33 | ||||
-rw-r--r-- | src/http/modules/proxy/ngx_http_proxy_upstream.c | 9 |
4 files changed, 34 insertions, 10 deletions
diff --git a/src/http/modules/proxy/ngx_http_proxy_handler.c b/src/http/modules/proxy/ngx_http_proxy_handler.c index 0fd89c139..d7cbf9608 100644 --- a/src/http/modules/proxy/ngx_http_proxy_handler.c +++ b/src/http/modules/proxy/ngx_http_proxy_handler.c @@ -262,6 +262,7 @@ ngx_http_header_t ngx_http_proxy_headers_in[] = { { ngx_string("Expires"), offsetof(ngx_http_proxy_headers_in_t, expires) }, { ngx_string("Cache-Control"), offsetof(ngx_http_proxy_headers_in_t, cache_control) }, + { ngx_string("ETag"), offsetof(ngx_http_proxy_headers_in_t, etag) }, { ngx_string("X-Accel-Expires"), offsetof(ngx_http_proxy_headers_in_t, x_accel_expires) }, diff --git a/src/http/modules/proxy/ngx_http_proxy_handler.h b/src/http/modules/proxy/ngx_http_proxy_handler.h index 853aa7617..55eee74e9 100644 --- a/src/http/modules/proxy/ngx_http_proxy_handler.h +++ b/src/http/modules/proxy/ngx_http_proxy_handler.h @@ -114,6 +114,7 @@ typedef struct { ngx_table_elt_t *expires; ngx_table_elt_t *cache_control; + ngx_table_elt_t *etag; ngx_table_elt_t *x_accel_expires; ngx_table_elt_t *connection; diff --git a/src/http/modules/proxy/ngx_http_proxy_header.c b/src/http/modules/proxy/ngx_http_proxy_header.c index 8c24a065e..cb13034f7 100644 --- a/src/http/modules/proxy/ngx_http_proxy_header.c +++ b/src/http/modules/proxy/ngx_http_proxy_header.c @@ -20,6 +20,8 @@ int ngx_http_proxy_copy_header(ngx_http_proxy_ctx_t *p, h = headers_in->headers.elts; for (i = 0; i < headers_in->headers.nelts; i++) { + /* ignore some headers */ + if (&h[i] == headers_in->connection) { continue; } @@ -51,12 +53,18 @@ int ngx_http_proxy_copy_header(ngx_http_proxy_ctx_t *p, } } + + /* "Content-Type" is handled specially */ + if (&h[i] == headers_in->content_type) { r->headers_out.content_type = &h[i]; r->headers_out.content_type->key.len = 0; continue; } + + /* copy some header pointers and set up r->headers_out */ + if (!(ho = ngx_http_add_header(&r->headers_out, ngx_http_headers_out))) { return NGX_ERROR; @@ -64,9 +72,30 @@ int ngx_http_proxy_copy_header(ngx_http_proxy_ctx_t *p, *ho = h[i]; + if (&h[i] == headers_in->expires) { + r->headers_out.expires = ho; + continue; + } + + if (&h[i] == headers_in->cache_control) { + r->headers_out.cache_control = ho; + continue; + } + + if (&h[i] == headers_in->etag) { + r->headers_out.etag = ho; + continue; + } + + if (&h[i] == headers_in->last_modified) { + r->headers_out.last_modified = ho; + /* TODO: update r->headers_out.last_modified_time */ + continue; + } + /* - * ngx_http_header_filter() does not handle specially - * the following headers if they are set: + * ngx_http_header_filter() passes the following headers as is + * and does not handle them specially if they are set: * r->headers_out.server, * r->headers_out.date, * r->headers_out.content_length diff --git a/src/http/modules/proxy/ngx_http_proxy_upstream.c b/src/http/modules/proxy/ngx_http_proxy_upstream.c index 41946bfc6..60c9e8fca 100644 --- a/src/http/modules/proxy/ngx_http_proxy_upstream.c +++ b/src/http/modules/proxy/ngx_http_proxy_upstream.c @@ -338,9 +338,7 @@ static void ngx_http_proxy_init_upstream(void *data) r->connection->read->event_handler = ngx_http_proxy_check_broken_connection; - if (ngx_event_flags & (NGX_USE_CLEAR_EVENT|NGX_HAVE_KQUEUE_EVENT)) { - - /* kqueue allows to detect when client closes prematurely connection */ + if (ngx_event_flags & NGX_USE_CLEAR_EVENT) { r->connection->write->event_handler = ngx_http_proxy_check_broken_connection; @@ -627,11 +625,6 @@ static void ngx_http_proxy_connect(ngx_http_proxy_ctx_t *p) if (rc == NGX_AGAIN) { ngx_add_timer(c->write, p->lcf->connect_timeout); - - ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0, - "http proxy connect handler: " PTR_FMT, - c->write->event_handler); - return; } |