comparison src/http/ngx_http_file_cache.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
1126 { 1126 {
1127 ngx_msec_t elapsed; 1127 ngx_msec_t elapsed;
1128 1128
1129 if (cache->files++ > 100) { 1129 if (cache->files++ > 100) {
1130 1130
1131 ngx_time_update(0, 0); 1131 ngx_time_update();
1132 1132
1133 elapsed = ngx_abs((ngx_msec_int_t) (ngx_current_msec - cache->last)); 1133 elapsed = ngx_abs((ngx_msec_int_t) (ngx_current_msec - cache->last));
1134 1134
1135 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, ngx_cycle->log, 0, 1135 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, ngx_cycle->log, 0,
1136 "http file cache manager time: %M", elapsed); 1136 "http file cache manager time: %M", elapsed);
1143 * therefore sleep 200ms 1143 * therefore sleep 200ms
1144 */ 1144 */
1145 1145
1146 ngx_msleep(200); 1146 ngx_msleep(200);
1147 1147
1148 ngx_time_update(0, 0); 1148 ngx_time_update();
1149 } 1149 }
1150 1150
1151 cache->last = ngx_current_msec; 1151 cache->last = ngx_current_msec;
1152 cache->files = 0; 1152 cache->files = 0;
1153 } 1153 }
1602 v->valid = valid; 1602 v->valid = valid;
1603 } 1603 }
1604 1604
1605 return NGX_CONF_OK; 1605 return NGX_CONF_OK;
1606 } 1606 }
1607
1608
1609 ngx_int_t
1610 ngx_http_cache(ngx_http_request_t *r, ngx_array_t *no_cache)
1611 {
1612 ngx_str_t val;
1613 ngx_uint_t i;
1614 ngx_http_complex_value_t *cv;
1615
1616 cv = no_cache->elts;
1617
1618 for (i = 0; i < no_cache->nelts; i++) {
1619 if (ngx_http_complex_value(r, &cv[i], &val) != NGX_OK) {
1620 return NGX_ERROR;
1621 }
1622
1623 if (val.len && val.data[0] != '0') {
1624 return NGX_DECLINED;
1625 }
1626 }
1627
1628 return NGX_OK;
1629 }
1630
1631
1632 char *
1633 ngx_http_no_cache_set_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
1634 {
1635 char *p = conf;
1636
1637 ngx_str_t *value;
1638 ngx_uint_t i;
1639 ngx_array_t **a;
1640 ngx_http_complex_value_t *cv;
1641 ngx_http_compile_complex_value_t ccv;
1642
1643 a = (ngx_array_t **) (p + cmd->offset);
1644
1645 if (*a == NGX_CONF_UNSET_PTR) {
1646 *a = ngx_array_create(cf->pool, 1, sizeof(ngx_http_complex_value_t));
1647 if (*a == NULL) {
1648 return NGX_CONF_ERROR;
1649 }
1650 }
1651
1652 value = cf->args->elts;
1653
1654 for (i = 1; i < cf->args->nelts; i++) {
1655 cv = ngx_array_push(*a);
1656 if (cv == NULL) {
1657 return NGX_CONF_ERROR;
1658 }
1659
1660 ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
1661
1662 ccv.cf = cf;
1663 ccv.value = &value[i];
1664 ccv.complex_value = cv;
1665
1666 if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
1667 return NGX_CONF_ERROR;
1668 }
1669 }
1670
1671 return NGX_CONF_OK;
1672 }