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