Mercurial > hg > nginx-ranges
comparison src/http/ngx_http_upstream.c @ 520: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
519:41f4e459ace8 | 520: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 |