comparison src/http/ngx_http_upstream.c @ 510:24b676623d4f NGINX_0_8_7

nginx 0.8.7 *) Change: minimum supported OpenSSL version is 0.9.7. *) Change: the "ask" parameter of the "ssl_verify_client" directive was changed to the "optional" parameter and now it checks a client certificate if it was offered. Thanks to Brice Figureau. *) Feature: the $ssl_client_verify variable. Thanks to Brice Figureau. *) Feature: the "ssl_crl" directive. Thanks to Brice Figureau. *) Feature: the "proxy" parameter of the "geo" directive. *) Feature: the "image_filter" directive supports variables for setting size. *) Bugfix: the $ssl_client_cert variable usage corrupted memory; the bug had appeared in 0.7.7. Thanks to Sergey Zhuravlev. *) Bugfix: "proxy_pass_header" and "fastcgi_pass_header" directives did not pass to a client the "X-Accel-Redirect", "X-Accel-Limit-Rate", "X-Accel-Buffering", and "X-Accel-Charset" lines from backend response header. Thanks to Maxim Dounin. *) Bugfix: in handling "Last-Modified" and "Accept-Ranges" backend response header lines; the bug had appeared in 0.7.44. Thanks to Maxim Dounin. *) Bugfix: the "[alert] zero size buf" error if subrequest returns an empty response; the bug had appeared in 0.8.5.
author Igor Sysoev <http://sysoev.ru>
date Mon, 27 Jul 2009 00:00:00 +0400
parents e8b686f230a8
children 6557aef8a4b2
comparison
equal deleted inserted replaced
509:41f4e459ace8 510:24b676623d4f
222 ngx_http_upstream_copy_header_line, 0, 0 }, 222 ngx_http_upstream_copy_header_line, 0, 0 },
223 223
224 { ngx_string("X-Accel-Redirect"), 224 { ngx_string("X-Accel-Redirect"),
225 ngx_http_upstream_process_header_line, 225 ngx_http_upstream_process_header_line,
226 offsetof(ngx_http_upstream_headers_in_t, x_accel_redirect), 226 offsetof(ngx_http_upstream_headers_in_t, x_accel_redirect),
227 ngx_http_upstream_ignore_header_line, 0, 0 }, 227 ngx_http_upstream_copy_header_line, 0, 0 },
228 228
229 { ngx_string("X-Accel-Limit-Rate"), 229 { ngx_string("X-Accel-Limit-Rate"),
230 ngx_http_upstream_process_limit_rate, 0, 230 ngx_http_upstream_process_limit_rate, 0,
231 ngx_http_upstream_ignore_header_line, 0, 0 }, 231 ngx_http_upstream_copy_header_line, 0, 0 },
232 232
233 { ngx_string("X-Accel-Buffering"), 233 { ngx_string("X-Accel-Buffering"),
234 ngx_http_upstream_process_buffering, 0, 234 ngx_http_upstream_process_buffering, 0,
235 ngx_http_upstream_ignore_header_line, 0, 0 }, 235 ngx_http_upstream_copy_header_line, 0, 0 },
236 236
237 { ngx_string("X-Accel-Charset"), 237 { ngx_string("X-Accel-Charset"),
238 ngx_http_upstream_process_charset, 0, 238 ngx_http_upstream_process_charset, 0,
239 ngx_http_upstream_ignore_header_line, 0, 0 }, 239 ngx_http_upstream_copy_header_line, 0, 0 },
240 240
241 #if (NGX_HTTP_GZIP) 241 #if (NGX_HTTP_GZIP)
242 { ngx_string("Content-Encoding"), 242 { ngx_string("Content-Encoding"),
243 ngx_http_upstream_process_header_line, 243 ngx_http_upstream_process_header_line,
244 offsetof(ngx_http_upstream_headers_in_t, content_encoding), 244 offsetof(ngx_http_upstream_headers_in_t, content_encoding),
346 { ngx_string("POST"), NGX_HTTP_POST }, 346 { ngx_string("POST"), NGX_HTTP_POST },
347 { ngx_null_string, 0 } 347 { ngx_null_string, 0 }
348 }; 348 };
349 349
350 350
351 ngx_int_t
352 ngx_http_upstream_create(ngx_http_request_t *r)
353 {
354 ngx_http_upstream_t *u;
355
356 u = r->upstream;
357
358 if (u && u->cleanup) {
359 ngx_http_upstream_cleanup(r);
360 *u->cleanup = NULL;
361 }
362
363 u = ngx_pcalloc(r->pool, sizeof(ngx_http_upstream_t));
364 if (u == NULL) {
365 return NGX_ERROR;
366 }
367
368 r->upstream = u;
369
370 u->peer.log = r->connection->log;
371 u->peer.log_error = NGX_ERROR_ERR;
372 #if (NGX_THREADS)
373 u->peer.lock = &r->connection->lock;
374 #endif
375
376 return NGX_OK;
377 }
378
379
351 void 380 void
352 ngx_http_upstream_init(ngx_http_request_t *r) 381 ngx_http_upstream_init(ngx_http_request_t *r)
353 { 382 {
354 ngx_str_t *host; 383 ngx_str_t *host;
355 ngx_uint_t i; 384 ngx_uint_t i;
3299 return NGX_ERROR; 3328 return NGX_ERROR;
3300 } 3329 }
3301 3330
3302 *ho = *h; 3331 *ho = *h;
3303 3332
3333 r->headers_out.last_modified = ho;
3334
3304 #if (NGX_HTTP_CACHE) 3335 #if (NGX_HTTP_CACHE)
3305 3336
3306 if (r->upstream->cacheable) { 3337 if (r->upstream->cacheable) {
3307 r->headers_out.last_modified = ho;
3308 r->headers_out.last_modified_time = ngx_http_parse_time(h->value.data, 3338 r->headers_out.last_modified_time = ngx_http_parse_time(h->value.data,
3309 h->value.len); 3339 h->value.len);
3310 } 3340 }
3311 3341
3312 #endif 3342 #endif
3425 if (ho == NULL) { 3455 if (ho == NULL) {
3426 return NGX_ERROR; 3456 return NGX_ERROR;
3427 } 3457 }
3428 3458
3429 *ho = *h; 3459 *ho = *h;
3460
3461 r->headers_out.accept_ranges = ho;
3430 3462
3431 return NGX_OK; 3463 return NGX_OK;
3432 } 3464 }
3433 3465
3434 3466