comparison src/http/modules/ngx_http_proxy_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
comparison
equal deleted inserted replaced
507:bfc170196f52 508:68c0ae0a4959
355 ngx_http_file_cache_set_slot, 355 ngx_http_file_cache_set_slot,
356 0, 356 0,
357 0, 357 0,
358 &ngx_http_proxy_module }, 358 &ngx_http_proxy_module },
359 359
360 { ngx_string("proxy_no_cache"),
361 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
362 ngx_http_no_cache_set_slot,
363 NGX_HTTP_LOC_CONF_OFFSET,
364 offsetof(ngx_http_proxy_loc_conf_t, upstream.no_cache),
365 NULL },
366
360 { ngx_string("proxy_cache_valid"), 367 { ngx_string("proxy_cache_valid"),
361 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE, 368 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
362 ngx_http_file_cache_valid_set_slot, 369 ngx_http_file_cache_valid_set_slot,
363 NGX_HTTP_LOC_CONF_OFFSET, 370 NGX_HTTP_LOC_CONF_OFFSET,
364 offsetof(ngx_http_proxy_loc_conf_t, upstream.cache_valid), 371 offsetof(ngx_http_proxy_loc_conf_t, upstream.cache_valid),
628 u->create_request = ngx_http_proxy_create_request; 635 u->create_request = ngx_http_proxy_create_request;
629 u->reinit_request = ngx_http_proxy_reinit_request; 636 u->reinit_request = ngx_http_proxy_reinit_request;
630 u->process_header = ngx_http_proxy_process_status_line; 637 u->process_header = ngx_http_proxy_process_status_line;
631 u->abort_request = ngx_http_proxy_abort_request; 638 u->abort_request = ngx_http_proxy_abort_request;
632 u->finalize_request = ngx_http_proxy_finalize_request; 639 u->finalize_request = ngx_http_proxy_finalize_request;
640 r->state = 0;
633 641
634 if (plcf->redirects) { 642 if (plcf->redirects) {
635 u->rewrite_redirect = ngx_http_proxy_rewrite_redirect; 643 u->rewrite_redirect = ngx_http_proxy_rewrite_redirect;
636 } 644 }
637 645
1189 ctx->status_count = 0; 1197 ctx->status_count = 0;
1190 ctx->status_start = NULL; 1198 ctx->status_start = NULL;
1191 ctx->status_end = NULL; 1199 ctx->status_end = NULL;
1192 1200
1193 r->upstream->process_header = ngx_http_proxy_process_status_line; 1201 r->upstream->process_header = ngx_http_proxy_process_status_line;
1202 r->state = 0;
1194 1203
1195 return NGX_OK; 1204 return NGX_OK;
1196 } 1205 }
1197 1206
1198 1207
1904 * conf->headers_set = NULL; 1913 * conf->headers_set = NULL;
1905 * conf->headers_set_hash = NULL; 1914 * conf->headers_set_hash = NULL;
1906 * conf->body_set_len = NULL; 1915 * conf->body_set_len = NULL;
1907 * conf->body_set = NULL; 1916 * conf->body_set = NULL;
1908 * conf->body_source = { 0, NULL }; 1917 * conf->body_source = { 0, NULL };
1909 * conf->rewrite_locations = NULL; 1918 * conf->redirects = NULL;
1910 */ 1919 */
1911 1920
1912 conf->upstream.store = NGX_CONF_UNSET; 1921 conf->upstream.store = NGX_CONF_UNSET;
1913 conf->upstream.store_access = NGX_CONF_UNSET_UINT; 1922 conf->upstream.store_access = NGX_CONF_UNSET_UINT;
1914 conf->upstream.buffering = NGX_CONF_UNSET; 1923 conf->upstream.buffering = NGX_CONF_UNSET;
1929 conf->upstream.pass_request_body = NGX_CONF_UNSET; 1938 conf->upstream.pass_request_body = NGX_CONF_UNSET;
1930 1939
1931 #if (NGX_HTTP_CACHE) 1940 #if (NGX_HTTP_CACHE)
1932 conf->upstream.cache = NGX_CONF_UNSET_PTR; 1941 conf->upstream.cache = NGX_CONF_UNSET_PTR;
1933 conf->upstream.cache_min_uses = NGX_CONF_UNSET_UINT; 1942 conf->upstream.cache_min_uses = NGX_CONF_UNSET_UINT;
1943 conf->upstream.no_cache = NGX_CONF_UNSET_PTR;
1934 conf->upstream.cache_valid = NGX_CONF_UNSET_PTR; 1944 conf->upstream.cache_valid = NGX_CONF_UNSET_PTR;
1935 #endif 1945 #endif
1936 1946
1937 conf->upstream.hide_headers = NGX_CONF_UNSET_PTR; 1947 conf->upstream.hide_headers = NGX_CONF_UNSET_PTR;
1938 conf->upstream.pass_headers = NGX_CONF_UNSET_PTR; 1948 conf->upstream.pass_headers = NGX_CONF_UNSET_PTR;
2152 2162
2153 if (conf->upstream.cache_use_stale & NGX_HTTP_UPSTREAM_FT_OFF) { 2163 if (conf->upstream.cache_use_stale & NGX_HTTP_UPSTREAM_FT_OFF) {
2154 conf->upstream.cache_use_stale = NGX_CONF_BITMASK_SET 2164 conf->upstream.cache_use_stale = NGX_CONF_BITMASK_SET
2155 |NGX_HTTP_UPSTREAM_FT_OFF; 2165 |NGX_HTTP_UPSTREAM_FT_OFF;
2156 } 2166 }
2167
2168 ngx_conf_merge_ptr_value(conf->upstream.no_cache,
2169 prev->upstream.no_cache, NULL);
2157 2170
2158 ngx_conf_merge_ptr_value(conf->upstream.cache_valid, 2171 ngx_conf_merge_ptr_value(conf->upstream.cache_valid,
2159 prev->upstream.cache_valid, NULL); 2172 prev->upstream.cache_valid, NULL);
2160 2173
2161 if (conf->cache_key.value.data == NULL) { 2174 if (conf->cache_key.value.data == NULL) {
2745 if (pr == NULL) { 2758 if (pr == NULL) {
2746 return NGX_CONF_ERROR; 2759 return NGX_CONF_ERROR;
2747 } 2760 }
2748 2761
2749 if (ngx_strcmp(value[1].data, "default") == 0) { 2762 if (ngx_strcmp(value[1].data, "default") == 0) {
2763 if (plcf->proxy_lengths) {
2764 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
2765 "\"proxy_redirect default\" may not be used "
2766 "with \"proxy_pass\" directive with variables");
2767 return NGX_CONF_ERROR;
2768 }
2769
2750 if (plcf->url.data == NULL) { 2770 if (plcf->url.data == NULL) {
2751 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, 2771 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
2752 "\"proxy_rewrite_location default\" must go " 2772 "\"proxy_redirect default\" must go "
2753 "after the \"proxy_pass\" directive"); 2773 "after the \"proxy_pass\" directive");
2754 return NGX_CONF_ERROR; 2774 return NGX_CONF_ERROR;
2755 } 2775 }
2756 2776
2757 pr->handler = ngx_http_proxy_rewrite_redirect_text; 2777 pr->handler = ngx_http_proxy_rewrite_redirect_text;