Mercurial > hg > nginx-vendor-0-7
comparison src/http/ngx_http_upstream.c @ 508:68c0ae0a4959 NGINX_0_7_66
nginx 0.7.66
*) Security: now nginx/Windows ignores default file stream name.
Thanks to Jose Antonio Vazquez Gonzalez.
*) Change: now the charset filter runs before the SSI filter.
*) Change: now no message is written in an error log if a variable is
not found by $r->variable() method.
*) Change: now keepalive connections after POST requests are not
disabled for MSIE 7.0+.
Thanks to Adam Lounds.
*) Feature: the "proxy_no_cache" and "fastcgi_no_cache" directives.
*) Feature: now the "rewrite" directive does a redirect automatically
if the $scheme variable is used.
Thanks to Piotr Sikora.
*) Feature: the "chunked_transfer_encoding" directive.
*) Feature: the $geoip_city_continent_code, $geoip_latitude, and
$geoip_longitude variables.
Thanks to Arvind Sundararajan.
*) Feature: now the ngx_http_image_filter_module deletes always EXIF
and other application specific data if the data consume more than 5%
of a JPEG file.
*) Feature: now the "msie_padding" directive works for Chrome too.
*) Workaround: now keepalive connections are disabled for Safari.
Thanks to Joshua Sierles.
*) Bugfix: nginx ignored the "private" and "no-store" values in the
"Cache-Control" backend response header line.
*) Bugfix: an "&" character was not escaped when it was copied in
arguments part in a rewrite rule.
*) Bugfix: nginx might be terminated abnormally while a signal
processing or if the directive "timer_resolution" was used on
platforms which do not support kqueue or eventport notification
methods.
Thanks to George Xie and Maxim Dounin.
*) Bugfix: if temporary files and permanent storage area resided at
different file systems, then permanent file modification times were
incorrect.
Thanks to Maxim Dounin.
*) Bugfix: ngx_http_memcached_module might issue the error message
"memcached sent invalid trailer".
Thanks to Maxim Dounin.
*) Bugfix: nginx could not built zlib-1.2.4 library using the library
sources.
Thanks to Maxim Dounin.
*) Bugfix: values of the $query_string, $arg_..., etc. variables cached
in main request were used by the SSI module in subrequests.
*) Bugfix: nginx did not support HTTPS referrers.
*) Bugfix: nginx/Windows might not find file if path in configuration
was given in other character case; the bug had appeared in 0.7.65.
*) Bugfix: the $date_local variable has an incorrect value, if the "%s"
format was used.
Thanks to Maxim Dounin.
*) Bugfix: nginx did not support all ciphers and digests used in client
certificates.
Thanks to Innocenty Enikeew.
*) Bugfix: if ssl_session_cache was not set or was set to "none", then
during client certificate verify the error "session id context
uninitialized" might occur; the bug had appeared in 0.7.1.
*) Bugfix: OpenSSL-1.0.0 compatibility on 64-bit Linux.
Thanks to Maxim Dounin.
*) Bugfix: a geo range returned default value if the range included two
or more /16 networks and did not begin at /16 network boundary.
*) Bugfix: the $uid_got variable might not be used in the SSI and perl
modules.
*) Bugfix: a worker process hung if a FIFO file was requested.
Thanks to Vicente Aguilar and Maxim Dounin.
*) Bugfix: a variable value was repeatedly encoded after each an "echo"
SSI-command output; the bug had appeared in 0.6.14.
*) Bugfix: a "stub" parameter of an "include" SSI directive was not
used, if empty response has 200 status code.
*) Bugfix: a block used in a "stub" parameter of an "include" SSI
directive was output with "text/plain" MIME type.
*) Bugfix: if a proxied or FastCGI request was internally redirected to
another proxied or FastCGI location, then a segmentation fault might
occur in a worker process; the bug had appeared in 0.7.65.
Thanks to Yichun Zhang.
*) Bugfix: IMAP connections may hang until they timed out while talking
to Zimbra server.
Thanks to Alan Batie.
*) Bugfix: nginx did not support chunked transfer encoding for 201
responses.
Thanks to Julian Reich.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Mon, 07 Jun 2010 00:00:00 +0400 |
parents | b9fdcaf2062b |
children |
comparison
equal
deleted
inserted
replaced
507:bfc170196f52 | 508:68c0ae0a4959 |
---|---|
361 | 361 |
362 u = r->upstream; | 362 u = r->upstream; |
363 | 363 |
364 if (u && u->cleanup) { | 364 if (u && u->cleanup) { |
365 ngx_http_upstream_cleanup(r); | 365 ngx_http_upstream_cleanup(r); |
366 *u->cleanup = NULL; | |
367 u->cleanup = NULL; | |
368 } | 366 } |
369 | 367 |
370 u = ngx_pcalloc(r->pool, sizeof(ngx_http_upstream_t)); | 368 u = ngx_pcalloc(r->pool, sizeof(ngx_http_upstream_t)); |
371 if (u == NULL) { | 369 if (u == NULL) { |
372 return NGX_ERROR; | 370 return NGX_ERROR; |
585 ngx_http_upstream_cache(ngx_http_request_t *r, ngx_http_upstream_t *u) | 583 ngx_http_upstream_cache(ngx_http_request_t *r, ngx_http_upstream_t *u) |
586 { | 584 { |
587 ngx_int_t rc; | 585 ngx_int_t rc; |
588 ngx_http_cache_t *c; | 586 ngx_http_cache_t *c; |
589 | 587 |
588 if (u->conf->no_cache) { | |
589 rc = ngx_http_cache(r, u->conf->no_cache); | |
590 if (rc != NGX_OK) { | |
591 return rc; | |
592 } | |
593 } | |
594 | |
590 if (!(r->method & u->conf->cache_methods)) { | 595 if (!(r->method & u->conf->cache_methods)) { |
591 return NGX_DECLINED; | 596 return NGX_DECLINED; |
592 } | 597 } |
593 | 598 |
594 if (r->method & NGX_HTTP_HEAD) { | 599 if (r->method & NGX_HTTP_HEAD) { |
1773 if (ngx_http_parse_unsafe_uri(r, uri, &args, &flags) != NGX_OK) { | 1778 if (ngx_http_parse_unsafe_uri(r, uri, &args, &flags) != NGX_OK) { |
1774 ngx_http_finalize_request(r, NGX_HTTP_NOT_FOUND); | 1779 ngx_http_finalize_request(r, NGX_HTTP_NOT_FOUND); |
1775 return NGX_DONE; | 1780 return NGX_DONE; |
1776 } | 1781 } |
1777 | 1782 |
1778 if (flags & NGX_HTTP_ZERO_IN_URI) { | |
1779 r->zero_in_uri = 1; | |
1780 } | |
1781 | |
1782 if (r->method != NGX_HTTP_HEAD) { | 1783 if (r->method != NGX_HTTP_HEAD) { |
1783 r->method = NGX_HTTP_GET; | 1784 r->method = NGX_HTTP_GET; |
1784 } | 1785 } |
1785 | 1786 |
1786 r->valid_unparsed_uri = 0; | 1787 r->valid_unparsed_uri = 0; |
3002 | 3003 |
3003 if (r->cache->valid_sec != 0) { | 3004 if (r->cache->valid_sec != 0) { |
3004 return NGX_OK; | 3005 return NGX_OK; |
3005 } | 3006 } |
3006 | 3007 |
3007 last = h->value.data + h->value.len; | 3008 p = h->value.data; |
3008 | 3009 last = p + h->value.len; |
3009 if (ngx_strlcasestrn(h->value.data, last, (u_char *) "no-cache", 8 - 1) | 3010 |
3010 != NULL) | 3011 if (ngx_strlcasestrn(p, last, (u_char *) "no-cache", 8 - 1) != NULL |
3012 || ngx_strlcasestrn(p, last, (u_char *) "no-store", 8 - 1) != NULL | |
3013 || ngx_strlcasestrn(p, last, (u_char *) "private", 7 - 1) != NULL) | |
3011 { | 3014 { |
3012 u->cacheable = 0; | 3015 u->cacheable = 0; |
3013 return NGX_OK; | 3016 return NGX_OK; |
3014 } | 3017 } |
3015 | 3018 |
3016 p = ngx_strlcasestrn(h->value.data, last, (u_char *) "max-age=", 8 - 1); | 3019 p = ngx_strlcasestrn(p, last, (u_char *) "max-age=", 8 - 1); |
3017 | 3020 |
3018 if (p == NULL) { | 3021 if (p == NULL) { |
3019 return NGX_OK; | 3022 return NGX_OK; |
3020 } | 3023 } |
3021 | 3024 |