comparison src/http/ngx_http_core_module.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 e1f4748dc78e
comparison
equal deleted inserted replaced
507:bfc170196f52 508:68c0ae0a4959
558 ngx_conf_set_enum_slot, 558 ngx_conf_set_enum_slot,
559 NGX_HTTP_LOC_CONF_OFFSET, 559 NGX_HTTP_LOC_CONF_OFFSET,
560 offsetof(ngx_http_core_loc_conf_t, if_modified_since), 560 offsetof(ngx_http_core_loc_conf_t, if_modified_since),
561 &ngx_http_core_if_modified_since }, 561 &ngx_http_core_if_modified_since },
562 562
563 { ngx_string("chunked_transfer_encoding"),
564 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
565 ngx_conf_set_flag_slot,
566 NGX_HTTP_LOC_CONF_OFFSET,
567 offsetof(ngx_http_core_loc_conf_t, chunked_transfer_encoding),
568 NULL },
569
563 { ngx_string("error_page"), 570 { ngx_string("error_page"),
564 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF 571 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
565 |NGX_CONF_2MORE, 572 |NGX_CONF_2MORE,
566 ngx_http_core_error_page, 573 ngx_http_core_error_page,
567 NGX_HTTP_LOC_CONF_OFFSET, 574 NGX_HTTP_LOC_CONF_OFFSET,
742 case NGX_HTTP_CONNECTION_KEEP_ALIVE: 749 case NGX_HTTP_CONNECTION_KEEP_ALIVE:
743 r->keepalive = 1; 750 r->keepalive = 1;
744 break; 751 break;
745 } 752 }
746 753
747 if (r->keepalive && r->headers_in.msie && r->method == NGX_HTTP_POST) { 754 if (r->keepalive) {
748 755
749 /* 756 if (r->headers_in.msie6) {
750 * MSIE may wait for some time if an response for 757 if (r->method == NGX_HTTP_POST) {
751 * a POST request was sent over a keepalive connection 758 /*
752 */ 759 * MSIE may wait for some time if an response for
753 760 * a POST request was sent over a keepalive connection
754 r->keepalive = 0; 761 */
762 r->keepalive = 0;
763 }
764
765 } else if (r->headers_in.safari) {
766 /*
767 * Safari may send a POST request to a closed keepalive
768 * connection and stalls for some time
769 */
770 r->keepalive = 0;
771 }
755 } 772 }
756 773
757 if (r->headers_in.content_length_n > 0) { 774 if (r->headers_in.content_length_n > 0) {
758 r->lingering_close = 1; 775 r->lingering_close = 1;
759 776
1286 return NGX_AGAIN; 1303 return NGX_AGAIN;
1287 } 1304 }
1288 1305
1289 /* no content handler was found */ 1306 /* no content handler was found */
1290 1307
1291 if (r->uri.data[r->uri.len - 1] == '/' && !r->zero_in_uri) { 1308 if (r->uri.data[r->uri.len - 1] == '/') {
1292 1309
1293 if (ngx_http_map_uri_to_path(r, &path, &root, 0) != NULL) { 1310 if (ngx_http_map_uri_to_path(r, &path, &root, 0) != NULL) {
1294 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, 1311 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
1295 "directory index of \"%s\" is forbidden", path.data); 1312 "directory index of \"%s\" is forbidden", path.data);
1296 } 1313 }
2074 } 2091 }
2075 2092
2076 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0, 2093 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
2077 "http subrequest \"%V?%V\"", uri, &sr->args); 2094 "http subrequest \"%V?%V\"", uri, &sr->args);
2078 2095
2079 sr->zero_in_uri = (flags & NGX_HTTP_ZERO_IN_URI) != 0;
2080 sr->subrequest_in_memory = (flags & NGX_HTTP_SUBREQUEST_IN_MEMORY) != 0; 2096 sr->subrequest_in_memory = (flags & NGX_HTTP_SUBREQUEST_IN_MEMORY) != 0;
2081 sr->waited = (flags & NGX_HTTP_SUBREQUEST_WAITED) != 0; 2097 sr->waited = (flags & NGX_HTTP_SUBREQUEST_WAITED) != 0;
2082 2098
2083 sr->unparsed_uri = r->unparsed_uri; 2099 sr->unparsed_uri = r->unparsed_uri;
2084 sr->method_name = ngx_http_core_get_method; 2100 sr->method_name = ngx_http_core_get_method;
2942 lcf->msie_refresh = NGX_CONF_UNSET; 2958 lcf->msie_refresh = NGX_CONF_UNSET;
2943 lcf->log_not_found = NGX_CONF_UNSET; 2959 lcf->log_not_found = NGX_CONF_UNSET;
2944 lcf->log_subrequest = NGX_CONF_UNSET; 2960 lcf->log_subrequest = NGX_CONF_UNSET;
2945 lcf->recursive_error_pages = NGX_CONF_UNSET; 2961 lcf->recursive_error_pages = NGX_CONF_UNSET;
2946 lcf->server_tokens = NGX_CONF_UNSET; 2962 lcf->server_tokens = NGX_CONF_UNSET;
2963 lcf->chunked_transfer_encoding = NGX_CONF_UNSET;
2947 lcf->types_hash_max_size = NGX_CONF_UNSET_UINT; 2964 lcf->types_hash_max_size = NGX_CONF_UNSET_UINT;
2948 lcf->types_hash_bucket_size = NGX_CONF_UNSET_UINT; 2965 lcf->types_hash_bucket_size = NGX_CONF_UNSET_UINT;
2949 2966
2950 lcf->open_file_cache = NGX_CONF_UNSET_PTR; 2967 lcf->open_file_cache = NGX_CONF_UNSET_PTR;
2951 lcf->open_file_cache_valid = NGX_CONF_UNSET; 2968 lcf->open_file_cache_valid = NGX_CONF_UNSET;
3179 ngx_conf_merge_value(conf->log_not_found, prev->log_not_found, 1); 3196 ngx_conf_merge_value(conf->log_not_found, prev->log_not_found, 1);
3180 ngx_conf_merge_value(conf->log_subrequest, prev->log_subrequest, 0); 3197 ngx_conf_merge_value(conf->log_subrequest, prev->log_subrequest, 0);
3181 ngx_conf_merge_value(conf->recursive_error_pages, 3198 ngx_conf_merge_value(conf->recursive_error_pages,
3182 prev->recursive_error_pages, 0); 3199 prev->recursive_error_pages, 0);
3183 ngx_conf_merge_value(conf->server_tokens, prev->server_tokens, 1); 3200 ngx_conf_merge_value(conf->server_tokens, prev->server_tokens, 1);
3201 ngx_conf_merge_value(conf->chunked_transfer_encoding,
3202 prev->chunked_transfer_encoding, 1);
3184 3203
3185 ngx_conf_merge_ptr_value(conf->open_file_cache, 3204 ngx_conf_merge_ptr_value(conf->open_file_cache,
3186 prev->open_file_cache, NULL); 3205 prev->open_file_cache, NULL);
3187 3206
3188 ngx_conf_merge_sec_value(conf->open_file_cache_valid, 3207 ngx_conf_merge_sec_value(conf->open_file_cache_valid,