Mercurial > hg > nginx-vendor-0-5
comparison src/http/modules/ngx_http_fastcgi_module.c @ 328:26ff8d6b618d NGINX_0_5_34
nginx 0.5.34
*) Change: now the full request line instead of URI only is written to
error_log.
*) Feature: Cygwin compatibility.
Thanks to Vladimir Kutakov.
*) Feature: the "merge_slashes" directive.
*) Feature: the "gzip_vary" directive.
*) Feature: the "server_tokens" directive.
*) Feature: the "access_log" directive may be used inside the
"limit_except" block.
*) Bugfix: if the $server_protocol was used in FastCGI parameters and a
request line length was near to the "client_header_buffer_size"
directive value, then nginx issued an alert "fastcgi: the request
record is too big".
*) Bugfix: if a plain text HTTP/0.9 version request was made to HTTPS
server, then nginx returned usual response.
*) Bugfix: URL double escaping in a redirect of the "msie_refresh"
directive; bug appeared in 0.5.28.
*) Bugfix: a segmentation fault might occur in worker process if
subrequests were used.
*) Bugfix: the big responses may be transferred truncated if SSL and
gzip were used.
*) Bugfix: compatibility with mget.
*) Bugfix: nginx did not unescape URI in the "include" SSI command.
*) Bugfix: the segmentation fault was occurred on start or while
reconfiguration if variable was used in the "charset" or
"source_charset" directives.
*) Bugfix: nginx returned the 400 response on requests like
"GET http://www.domain.com HTTP/1.0".
Thanks to James Oakley.
*) Bugfix: a segmentation fault occurred in worker process if
$date_local and $date_gmt were used outside the
ngx_http_ssi_filter_module.
*) Bugfix: a segmentation fault might occur in worker process if debug
log was enabled.
Thanks to Andrei Nigmatulin.
*) Bugfix: ngx_http_memcached_module did not set
$upstream_response_time.
Thanks to Maxim Dounin.
*) Bugfix: a worker process may got caught in an endless loop, if the
memcached was used.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Thu, 13 Dec 2007 00:00:00 +0300 |
parents | 7cf404023f50 |
children | 2eea67ed0bc2 |
comparison
equal
deleted
inserted
replaced
327:cb962a94cd7b | 328:26ff8d6b618d |
---|---|
430 ngx_http_fastcgi_loc_conf_t *flcf; | 430 ngx_http_fastcgi_loc_conf_t *flcf; |
431 | 431 |
432 if (r->subrequest_in_memory) { | 432 if (r->subrequest_in_memory) { |
433 ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0, | 433 ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0, |
434 "ngx_http_fastcgi_module does not support " | 434 "ngx_http_fastcgi_module does not support " |
435 "subrequest in memeory"); | 435 "subrequest in memory"); |
436 return NGX_HTTP_INTERNAL_SERVER_ERROR; | 436 return NGX_HTTP_INTERNAL_SERVER_ERROR; |
437 } | 437 } |
438 | 438 |
439 flcf = ngx_http_get_module_loc_conf(r, ngx_http_fastcgi_module); | 439 flcf = ngx_http_get_module_loc_conf(r, ngx_http_fastcgi_module); |
440 | 440 |
503 flcf = ngx_http_get_module_loc_conf(r, ngx_http_fastcgi_module); | 503 flcf = ngx_http_get_module_loc_conf(r, ngx_http_fastcgi_module); |
504 | 504 |
505 if (flcf->params_len) { | 505 if (flcf->params_len) { |
506 ngx_memzero(&le, sizeof(ngx_http_script_engine_t)); | 506 ngx_memzero(&le, sizeof(ngx_http_script_engine_t)); |
507 | 507 |
508 ngx_http_script_flush_no_cachable_variables(r, flcf->flushes); | 508 ngx_http_script_flush_no_cacheable_variables(r, flcf->flushes); |
509 le.flushed = 1; | 509 le.flushed = 1; |
510 | 510 |
511 le.ip = flcf->params_len->elts; | 511 le.ip = flcf->params_len->elts; |
512 le.request = r; | 512 le.request = r; |
513 | 513 |
549 } | 549 } |
550 | 550 |
551 | 551 |
552 if (len > 65535) { | 552 if (len > 65535) { |
553 ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0, | 553 ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0, |
554 "fastcgi: the request record is too big"); | 554 "fastcgi request record is too big: %uz", len); |
555 return NGX_ERROR; | 555 return NGX_ERROR; |
556 } | 556 } |
557 | 557 |
558 | 558 |
559 padding = 8 - len % 8; | 559 padding = 8 - len % 8; |
1184 u->headers_in.status_line.data = (u_char *) "200 OK"; | 1184 u->headers_in.status_line.data = (u_char *) "200 OK"; |
1185 } | 1185 } |
1186 | 1186 |
1187 u->state->status = u->headers_in.status_n; | 1187 u->state->status = u->headers_in.status_n; |
1188 #if 0 | 1188 #if 0 |
1189 if (u->cachable) { | 1189 if (u->cacheable) { |
1190 u->cachable = ngx_http_upstream_is_cachable(r); | 1190 u->cacheable = ngx_http_upstream_is_cacheable(r); |
1191 } | 1191 } |
1192 #endif | 1192 #endif |
1193 | 1193 |
1194 break; | 1194 break; |
1195 } | 1195 } |
1608 ngx_http_fastcgi_add_variables(ngx_conf_t *cf) | 1608 ngx_http_fastcgi_add_variables(ngx_conf_t *cf) |
1609 { | 1609 { |
1610 ngx_http_variable_t *var; | 1610 ngx_http_variable_t *var; |
1611 | 1611 |
1612 var = ngx_http_add_variable(cf, &ngx_http_fastcgi_script_name, | 1612 var = ngx_http_add_variable(cf, &ngx_http_fastcgi_script_name, |
1613 NGX_HTTP_VAR_NOHASH|NGX_HTTP_VAR_NOCACHABLE); | 1613 NGX_HTTP_VAR_NOHASH|NGX_HTTP_VAR_NOCACHEABLE); |
1614 if (var == NULL) { | 1614 if (var == NULL) { |
1615 return NGX_ERROR; | 1615 return NGX_ERROR; |
1616 } | 1616 } |
1617 | 1617 |
1618 var->get_handler = ngx_http_fastcgi_script_name_variable; | 1618 var->get_handler = ngx_http_fastcgi_script_name_variable; |
2102 u_char *p; | 2102 u_char *p; |
2103 ngx_http_fastcgi_loc_conf_t *flcf; | 2103 ngx_http_fastcgi_loc_conf_t *flcf; |
2104 | 2104 |
2105 if (r->uri.len) { | 2105 if (r->uri.len) { |
2106 v->valid = 1; | 2106 v->valid = 1; |
2107 v->no_cachable = 0; | 2107 v->no_cacheable = 0; |
2108 v->not_found = 0; | 2108 v->not_found = 0; |
2109 | 2109 |
2110 flcf = ngx_http_get_module_loc_conf(r, ngx_http_fastcgi_module); | 2110 flcf = ngx_http_get_module_loc_conf(r, ngx_http_fastcgi_module); |
2111 | 2111 |
2112 if (r->uri.data[r->uri.len - 1] != '/') { | 2112 if (r->uri.data[r->uri.len - 1] != '/') { |
2126 ngx_memcpy(p, flcf->index.data, flcf->index.len); | 2126 ngx_memcpy(p, flcf->index.data, flcf->index.len); |
2127 | 2127 |
2128 } else { | 2128 } else { |
2129 v->len = 0; | 2129 v->len = 0; |
2130 v->valid = 1; | 2130 v->valid = 1; |
2131 v->no_cachable = 0; | 2131 v->no_cacheable = 0; |
2132 v->not_found = 0; | 2132 v->not_found = 0; |
2133 v->data = NULL; | 2133 v->data = NULL; |
2134 | 2134 |
2135 return NGX_OK; | 2135 return NGX_OK; |
2136 } | 2136 } |
2213 | 2213 |
2214 sc.cf = cf; | 2214 sc.cf = cf; |
2215 sc.source = &value[1]; | 2215 sc.source = &value[1]; |
2216 sc.lengths = &flcf->upstream.store_lengths; | 2216 sc.lengths = &flcf->upstream.store_lengths; |
2217 sc.values = &flcf->upstream.store_values; | 2217 sc.values = &flcf->upstream.store_values; |
2218 sc.variables = ngx_http_script_variables_count(&value[1]);; | 2218 sc.variables = ngx_http_script_variables_count(&value[1]); |
2219 sc.complete_lengths = 1; | 2219 sc.complete_lengths = 1; |
2220 sc.complete_values = 1; | 2220 sc.complete_values = 1; |
2221 | 2221 |
2222 if (ngx_http_script_compile(&sc) != NGX_OK) { | 2222 if (ngx_http_script_compile(&sc) != NGX_OK) { |
2223 return NGX_CONF_ERROR; | 2223 return NGX_CONF_ERROR; |