Mercurial > hg > nginx-vendor-0-7
comparison src/http/modules/ngx_http_fastcgi_module.c @ 506:b9fdcaf2062b NGINX_0_7_65
nginx 0.7.65
*) Security: now nginx/Windows ignores trailing spaces in URI.
Thanks to Dan Crowley, Core Security Technologies.
*) Security: now nginx/Windows ignores short files names.
Thanks to Dan Crowley, Core Security Technologies.
*) Change: now the "009" status code is written to an access log for
proxied HTTP/0.9 responses.
*) Change: now the default buffer size of the
"large_client_header_buffers" directive is 8K.
Thanks to Andrew Cholakian.
*) Change: now default SSL ciphers are "HIGH:!ADH:!MD5".
*) Change: now SSLv2 protocol is disabled by default.
*) Change: now $host variable value is always low case.
*) Feature: the conf/fastcgi.conf for simple FastCGI configurations.
*) Feature: now URI part is not required a "proxy_pass" directive if
variables are used.
*) Feature: the $ssl_session_id variable.
*) Bugfix: if a proxied or FastCGI request was internally redirected to
another proxied or FastCGI location, then $upstream_response_time
variable may have abnormally large value; the bug had appeared in
0.7.63.
*) Bugfix: if the "expires modified" set date in the past, then a
negative number was set in the "Cache-Control" response header
line.
Thanks to Alex Kapranoff.
*) Bugfix: nginx closed a connection if a cached response had an empty
body.
Thanks to Piotr Sikora.
*) Bugfix: nginx cached a 304 response if there was the "If-None-Match"
header line in a proxied request.
Thanks to Tim Dettrick and David Kostal.
*) Bugfix: nginx did not treat a comma as separator in the
"Cache-Control" backend response header line.
*) Bugfix: cached HTTP/0.9 responses were handled incorrectly.
*) Bugfix: nginx sent gzipped responses to clients those do not support
gzip, if "gzip_static on" and "gzip_vary off"; the bug had appeared
in 0.8.16.
*) Bugfix: nginx always added "Content-Encoding: gzip" response header
line in 304 responses sent by ngx_http_gzip_static_module.
*) Bugfix: the "!-x" operator did not work.
Thanks to Maxim Dounin.
*) Bugfix: a segmentation fault might occur in a worker process, if
limit_rate was used in HTTPS server.
Thanks to Maxim Dounin.
*) Bugfix: a segmentation fault might occur in a worker process while
$limit_rate logging.
Thanks to Maxim Dounin.
*) Bugfix: nginx did not support dates in 2038 year on 32-bit platforms;
*) Bugfix: nginx/Windows tried to delete a temporary file twice if the
file should replace an already existent file.
*) Bugfix: nginx/Windows tried to rename a temporary file twice if the
file should replace an already existent file.
*) Bugfix: nginx/Windows might not create temporary file, a cache file,
or "proxy/fastcgi_store"d file if a worker had no enough access
rights for top level directories.
*) Bugfix: in UTF-8 encoding support by "try_files" directive in
nginx/Windows.
*) Bugfix: UTF-8 encoding usage in the ngx_http_autoindex_module.
Thanks to Maxim Dounin.
*) Bugfix: the ngx_http_autoindex_module did not show the trailing
slash in links to a directory; the bug had appeared in 0.7.15.
*) Bugfix: nginx did not close a log file set by the --error-log-path
configuration option; the bug had appeared in 0.7.53.
*) Bugfix: "addition_types" directive was incorrectly named
"addtion_types".
*) Bugfix: invalid request line in $request variable was written in
access_log only if error_log was set to "info" or "debug" level.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Mon, 01 Feb 2010 00:00:00 +0000 |
parents | 89dc5654117c |
children | 68c0ae0a4959 |
comparison
equal
deleted
inserted
replaced
505:c62da3dcc544 | 506:b9fdcaf2062b |
---|---|
519 ngx_string("X-Accel-Limit-Rate"), | 519 ngx_string("X-Accel-Limit-Rate"), |
520 ngx_string("X-Accel-Buffering"), | 520 ngx_string("X-Accel-Buffering"), |
521 ngx_string("X-Accel-Charset"), | 521 ngx_string("X-Accel-Charset"), |
522 ngx_null_string | 522 ngx_null_string |
523 }; | 523 }; |
524 | |
525 | |
526 #if (NGX_HTTP_CACHE) | |
527 | |
528 static ngx_str_t ngx_http_fastcgi_hide_cache_headers[] = { | |
529 ngx_string("Status"), | |
530 ngx_string("X-Accel-Expires"), | |
531 ngx_string("X-Accel-Redirect"), | |
532 ngx_string("X-Accel-Limit-Rate"), | |
533 ngx_string("X-Accel-Buffering"), | |
534 ngx_string("X-Accel-Charset"), | |
535 ngx_string("Set-Cookie"), | |
536 ngx_string("P3P"), | |
537 ngx_null_string | |
538 }; | |
539 | |
540 #endif | |
524 | 541 |
525 | 542 |
526 static ngx_path_init_t ngx_http_fastcgi_temp_path = { | 543 static ngx_path_init_t ngx_http_fastcgi_temp_path = { |
527 ngx_string(NGX_HTTP_FASTCGI_TEMP_PATH), { 1, 2, 0 } | 544 ngx_string(NGX_HTTP_FASTCGI_TEMP_PATH), { 1, 2, 0 } |
528 }; | 545 }; |
1897 ngx_http_fastcgi_loc_conf_t *conf = child; | 1914 ngx_http_fastcgi_loc_conf_t *conf = child; |
1898 | 1915 |
1899 u_char *p; | 1916 u_char *p; |
1900 size_t size; | 1917 size_t size; |
1901 uintptr_t *code; | 1918 uintptr_t *code; |
1919 ngx_str_t *h; | |
1902 ngx_uint_t i; | 1920 ngx_uint_t i; |
1903 ngx_keyval_t *src; | 1921 ngx_keyval_t *src; |
1904 ngx_hash_init_t hash; | 1922 ngx_hash_init_t hash; |
1905 ngx_http_script_compile_t sc; | 1923 ngx_http_script_compile_t sc; |
1906 ngx_http_script_copy_code_t *copy; | 1924 ngx_http_script_copy_code_t *copy; |
2117 | 2135 |
2118 hash.max_size = 512; | 2136 hash.max_size = 512; |
2119 hash.bucket_size = ngx_align(64, ngx_cacheline_size); | 2137 hash.bucket_size = ngx_align(64, ngx_cacheline_size); |
2120 hash.name = "fastcgi_hide_headers_hash"; | 2138 hash.name = "fastcgi_hide_headers_hash"; |
2121 | 2139 |
2140 #if (NGX_HTTP_CACHE) | |
2141 | |
2142 h = conf->upstream.cache ? ngx_http_fastcgi_hide_cache_headers: | |
2143 ngx_http_fastcgi_hide_headers; | |
2144 #else | |
2145 | |
2146 h = ngx_http_fastcgi_hide_headers; | |
2147 | |
2148 #endif | |
2149 | |
2122 if (ngx_http_upstream_hide_headers_hash(cf, &conf->upstream, | 2150 if (ngx_http_upstream_hide_headers_hash(cf, &conf->upstream, |
2123 &prev->upstream, | 2151 &prev->upstream, h, &hash) |
2124 ngx_http_fastcgi_hide_headers, | |
2125 &hash) | |
2126 != NGX_OK) | 2152 != NGX_OK) |
2127 { | 2153 { |
2128 return NGX_CONF_ERROR; | 2154 return NGX_CONF_ERROR; |
2129 } | 2155 } |
2130 | 2156 |
2431 if (flcf->upstream.upstream || flcf->fastcgi_lengths) { | 2457 if (flcf->upstream.upstream || flcf->fastcgi_lengths) { |
2432 return "is duplicate"; | 2458 return "is duplicate"; |
2433 } | 2459 } |
2434 | 2460 |
2435 clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module); | 2461 clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module); |
2462 | |
2436 clcf->handler = ngx_http_fastcgi_handler; | 2463 clcf->handler = ngx_http_fastcgi_handler; |
2464 | |
2465 if (clcf->name.data[clcf->name.len - 1] == '/') { | |
2466 clcf->auto_redirect = 1; | |
2467 } | |
2437 | 2468 |
2438 value = cf->args->elts; | 2469 value = cf->args->elts; |
2439 | 2470 |
2440 url = &value[1]; | 2471 url = &value[1]; |
2441 | 2472 |
2466 u.no_resolve = 1; | 2497 u.no_resolve = 1; |
2467 | 2498 |
2468 flcf->upstream.upstream = ngx_http_upstream_add(cf, &u, 0); | 2499 flcf->upstream.upstream = ngx_http_upstream_add(cf, &u, 0); |
2469 if (flcf->upstream.upstream == NULL) { | 2500 if (flcf->upstream.upstream == NULL) { |
2470 return NGX_CONF_ERROR; | 2501 return NGX_CONF_ERROR; |
2471 } | |
2472 | |
2473 if (clcf->name.data[clcf->name.len - 1] == '/') { | |
2474 clcf->auto_redirect = 1; | |
2475 } | 2502 } |
2476 | 2503 |
2477 return NGX_CONF_OK; | 2504 return NGX_CONF_OK; |
2478 } | 2505 } |
2479 | 2506 |