summaryrefslogtreecommitdiffstats
path: root/usr.sbin/nginx/src/http/ngx_http_upstream.c
diff options
context:
space:
mode:
authorrobert <robert@openbsd.org>2011-11-12 11:09:00 +0000
committerrobert <robert@openbsd.org>2011-11-12 11:09:00 +0000
commite5f444907f27ebace3451e2b67ee6f223ce9957e (patch)
treef76a10b73d18d4116de1ca34902bec6f6b1bd328 /usr.sbin/nginx/src/http/ngx_http_upstream.c
parentupdate currency exchange rates; (diff)
downloadwireguard-openbsd-e5f444907f27ebace3451e2b67ee6f223ce9957e.tar.xz
wireguard-openbsd-e5f444907f27ebace3451e2b67ee6f223ce9957e.zip
update to 1.0.9
Diffstat (limited to 'usr.sbin/nginx/src/http/ngx_http_upstream.c')
-rw-r--r--usr.sbin/nginx/src/http/ngx_http_upstream.c55
1 files changed, 39 insertions, 16 deletions
diff --git a/usr.sbin/nginx/src/http/ngx_http_upstream.c b/usr.sbin/nginx/src/http/ngx_http_upstream.c
index 29432dc14a3..5aa96a4258c 100644
--- a/usr.sbin/nginx/src/http/ngx_http_upstream.c
+++ b/usr.sbin/nginx/src/http/ngx_http_upstream.c
@@ -360,6 +360,9 @@ ngx_conf_bitmask_t ngx_http_upstream_cache_method_mask[] = {
ngx_conf_bitmask_t ngx_http_upstream_ignore_headers_masks[] = {
{ ngx_string("X-Accel-Redirect"), NGX_HTTP_UPSTREAM_IGN_XA_REDIRECT },
{ ngx_string("X-Accel-Expires"), NGX_HTTP_UPSTREAM_IGN_XA_EXPIRES },
+ { ngx_string("X-Accel-Limit-Rate"), NGX_HTTP_UPSTREAM_IGN_XA_LIMIT_RATE },
+ { ngx_string("X-Accel-Buffering"), NGX_HTTP_UPSTREAM_IGN_XA_BUFFERING },
+ { ngx_string("X-Accel-Charset"), NGX_HTTP_UPSTREAM_IGN_XA_CHARSET },
{ ngx_string("Expires"), NGX_HTTP_UPSTREAM_IGN_EXPIRES },
{ ngx_string("Cache-Control"), NGX_HTTP_UPSTREAM_IGN_CACHE_CONTROL },
{ ngx_string("Set-Cookie"), NGX_HTTP_UPSTREAM_IGN_SET_COOKIE },
@@ -672,6 +675,8 @@ ngx_http_upstream_cache(ngx_http_request_t *r, ngx_http_upstream_t *u)
return NGX_DECLINED;
}
+ u->cacheable = 1;
+
switch (ngx_http_test_predicates(r, u->conf->cache_bypass)) {
case NGX_ERROR:
@@ -685,8 +690,6 @@ ngx_http_upstream_cache(ngx_http_request_t *r, ngx_http_upstream_t *u)
break;
}
- u->cacheable = 1;
-
c = r->cache;
c->min_uses = u->conf->cache_min_uses;
@@ -987,7 +990,7 @@ ngx_http_upstream_check_broken_connection(ngx_http_request_t *r,
if (!u->cacheable && u->peer.connection) {
ngx_log_error(NGX_LOG_INFO, ev->log, ev->kq_errno,
- "kevent() reported that client closed prematurely "
+ "kevent() reported that client prematurely closed "
"connection, so upstream connection is closed too");
ngx_http_upstream_finalize_request(r, u,
NGX_HTTP_CLIENT_CLOSED_REQUEST);
@@ -995,8 +998,8 @@ ngx_http_upstream_check_broken_connection(ngx_http_request_t *r,
}
ngx_log_error(NGX_LOG_INFO, ev->log, ev->kq_errno,
- "kevent() reported that client closed "
- "prematurely connection");
+ "kevent() reported that client prematurely closed "
+ "connection");
if (u->peer.connection == NULL) {
ngx_http_upstream_finalize_request(r, u,
@@ -1050,7 +1053,7 @@ ngx_http_upstream_check_broken_connection(ngx_http_request_t *r,
if (!u->cacheable && u->peer.connection) {
ngx_log_error(NGX_LOG_INFO, ev->log, err,
- "client closed prematurely connection, "
+ "client prematurely closed connection, "
"so upstream connection is closed too");
ngx_http_upstream_finalize_request(r, u,
NGX_HTTP_CLIENT_CLOSED_REQUEST);
@@ -1058,7 +1061,7 @@ ngx_http_upstream_check_broken_connection(ngx_http_request_t *r,
}
ngx_log_error(NGX_LOG_INFO, ev->log, err,
- "client closed prematurely connection");
+ "client prematurely closed connection");
if (u->peer.connection == NULL) {
ngx_http_upstream_finalize_request(r, u,
@@ -2154,8 +2157,6 @@ ngx_http_upstream_send_response(ngx_http_request_t *r, ngx_http_upstream_t *u)
ngx_http_upstream_finalize_request(r, u, 0);
return;
}
-
- u->cacheable = 1;
}
break;
@@ -3027,7 +3028,12 @@ ngx_http_upstream_finalize_request(ngx_http_request_t *r,
r->connection->log->action = "sending to client";
- if (rc == 0) {
+ if (rc == 0
+#if (NGX_HTTP_CACHE)
+ && !r->cached
+#endif
+ )
+ {
rc = ngx_http_send_special(r, NGX_HTTP_LAST);
}
@@ -3265,9 +3271,15 @@ static ngx_int_t
ngx_http_upstream_process_limit_rate(ngx_http_request_t *r, ngx_table_elt_t *h,
ngx_uint_t offset)
{
- ngx_int_t n;
+ ngx_int_t n;
+ ngx_http_upstream_t *u;
+
+ u = r->upstream;
+ u->headers_in.x_accel_limit_rate = h;
- r->upstream->headers_in.x_accel_limit_rate = h;
+ if (u->conf->ignore_headers & NGX_HTTP_UPSTREAM_IGN_XA_LIMIT_RATE) {
+ return NGX_OK;
+ }
n = ngx_atoi(h->value.data, h->value.len);
@@ -3283,16 +3295,23 @@ static ngx_int_t
ngx_http_upstream_process_buffering(ngx_http_request_t *r, ngx_table_elt_t *h,
ngx_uint_t offset)
{
- u_char c0, c1, c2;
+ u_char c0, c1, c2;
+ ngx_http_upstream_t *u;
- if (r->upstream->conf->change_buffering) {
+ u = r->upstream;
+
+ if (u->conf->ignore_headers & NGX_HTTP_UPSTREAM_IGN_XA_BUFFERING) {
+ return NGX_OK;
+ }
+
+ if (u->conf->change_buffering) {
if (h->value.len == 2) {
c0 = ngx_tolower(h->value.data[0]);
c1 = ngx_tolower(h->value.data[1]);
if (c0 == 'n' && c1 == 'o') {
- r->upstream->buffering = 0;
+ u->buffering = 0;
}
} else if (h->value.len == 3) {
@@ -3301,7 +3320,7 @@ ngx_http_upstream_process_buffering(ngx_http_request_t *r, ngx_table_elt_t *h,
c2 = ngx_tolower(h->value.data[2]);
if (c0 == 'y' && c1 == 'e' && c2 == 's') {
- r->upstream->buffering = 1;
+ u->buffering = 1;
}
}
}
@@ -3314,6 +3333,10 @@ static ngx_int_t
ngx_http_upstream_process_charset(ngx_http_request_t *r, ngx_table_elt_t *h,
ngx_uint_t offset)
{
+ if (r->upstream->conf->ignore_headers & NGX_HTTP_UPSTREAM_IGN_XA_CHARSET) {
+ return NGX_OK;
+ }
+
r->headers_out.override_charset = &h->value;
return NGX_OK;