diff options
author | Igor Sysoev <igor@sysoev.ru> | 2007-12-03 17:19:07 +0000 |
---|---|---|
committer | Jonathan Kolb <jon@b0g.us> | 2007-12-03 17:19:07 +0000 |
commit | a877b91668afa1325162965b701bb4268ee870cd (patch) | |
tree | b7c410a4d445d00b09fdccf3407d78ecd819464b /src/http | |
parent | 96c679da144902881c307389e9190304de658a24 (diff) | |
download | nginx-a877b91668afa1325162965b701bb4268ee870cd.tar.gz |
Changes with nginx 0.6.21 03 Dec 2007v0.6.21
*) Change: if variable values used in a "proxy_pass" directive contain
IP-addresses only, then a "resolver" directive is not mandatory.
resolver
*) Bugfix: a segmentation fault might occur in worker process if a
"proxy_pass" directive with URI-part was used; bug appeared in
0.6.19.
*) Bugfix: if resolver was used on platform that does not support
kqueue, then nginx issued an alert "name is out of response".
Thanks to Andrei Nigmatulin.
*) 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.
Diffstat (limited to 'src/http')
-rw-r--r-- | src/http/modules/ngx_http_fastcgi_module.c | 2 | ||||
-rw-r--r-- | src/http/modules/ngx_http_proxy_module.c | 20 | ||||
-rw-r--r-- | src/http/modules/perl/nginx.pm | 2 | ||||
-rw-r--r-- | src/http/ngx_http_core_module.c | 11 | ||||
-rw-r--r-- | src/http/ngx_http_request.c | 18 | ||||
-rw-r--r-- | src/http/ngx_http_special_response.c | 2 | ||||
-rw-r--r-- | src/http/ngx_http_upstream.c | 15 |
7 files changed, 38 insertions, 32 deletions
diff --git a/src/http/modules/ngx_http_fastcgi_module.c b/src/http/modules/ngx_http_fastcgi_module.c index 36c59ce4e..5a15fc1e2 100644 --- a/src/http/modules/ngx_http_fastcgi_module.c +++ b/src/http/modules/ngx_http_fastcgi_module.c @@ -553,7 +553,7 @@ ngx_http_fastcgi_create_request(ngx_http_request_t *r) if (len > 65535) { ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0, - "fastcgi: the request record is too big"); + "fastcgi request record is too big: %uz", len); return NGX_ERROR; } diff --git a/src/http/modules/ngx_http_proxy_module.c b/src/http/modules/ngx_http_proxy_module.c index 69a12e0fc..5f8b27803 100644 --- a/src/http/modules/ngx_http_proxy_module.c +++ b/src/http/modules/ngx_http_proxy_module.c @@ -675,7 +675,8 @@ ngx_http_proxy_create_request(ngx_http_request_t *r) r->uri.len - loc_len, NGX_ESCAPE_URI); } - len += r->uri.len - loc_len + escape + sizeof("?") - 1 + r->args.len; + len += ctx->vars.uri.len + r->uri.len - loc_len + escape + + sizeof("?") - 1 + r->args.len; } ngx_http_script_flush_no_cacheable_variables(r, plcf->flushes); @@ -2323,7 +2324,7 @@ ngx_http_proxy_pass(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) sc.variables = n; sc.complete_lengths = 1; sc.complete_values = 1; - + if (ngx_http_script_compile(&sc) != NGX_OK) { return NGX_CONF_ERROR; } @@ -2645,8 +2646,6 @@ static ngx_int_t ngx_http_proxy_set_vars(ngx_pool_t *pool, ngx_url_t *u, ngx_http_proxy_vars_t *v) { - u_char *p; - if (!u->unix_socket) { if (u->no_port || u->port == u->default_port) { v->host_header = u->host; @@ -2661,16 +2660,9 @@ ngx_http_proxy_set_vars(ngx_pool_t *pool, ngx_url_t *u, } } else { - p = ngx_palloc(pool, u->host.len + sizeof(":65536") - 1); - if (p == NULL) { - return NGX_ERROR; - } - - v->host_header.len = ngx_sprintf(p, "%V:%d", &u->host, u->port) - p; - v->host_header.data = p; - - v->port.len = v->host_header.len - u->host.len - 1; - v->port.data = p + u->host.len + 1; + v->host_header.len = u->host.len + 1 + u->port_text.len; + v->host_header.data = u->host.data; + v->port = u->port_text; } } else { diff --git a/src/http/modules/perl/nginx.pm b/src/http/modules/perl/nginx.pm index 8932398e9..89e06e563 100644 --- a/src/http/modules/perl/nginx.pm +++ b/src/http/modules/perl/nginx.pm @@ -47,7 +47,7 @@ our @EXPORT = qw( HTTP_INSUFFICIENT_STORAGE ); -our $VERSION = '0.6.20'; +our $VERSION = '0.6.21'; require XSLoader; XSLoader::load('nginx', $VERSION); diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c index da0288dfa..b882f1c2f 100644 --- a/src/http/ngx_http_core_module.c +++ b/src/http/ngx_http_core_module.c @@ -69,7 +69,7 @@ static char *ngx_http_core_keepalive(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); static char *ngx_http_core_internal(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); -static char * ngx_http_core_resolver(ngx_conf_t *cf, ngx_command_t *cmd, +static char *ngx_http_core_resolver(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); static char *ngx_http_core_lowat_check(ngx_conf_t *cf, void *post, void *data); @@ -2594,6 +2594,13 @@ ngx_http_core_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child) if (conf->resolver == NULL) { conf->resolver = prev->resolver; + + if (conf->resolver == NULL) { + conf->resolver = ngx_resolver_create(NULL, cf->cycle->new_log); + if (conf->resolver == NULL) { + return NGX_OK; + } + } } ngx_conf_merge_path_value(conf->client_body_temp_path, @@ -3393,6 +3400,8 @@ ngx_http_core_resolver(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) value = cf->args->elts; + ngx_memzero(&u, sizeof(ngx_url_t)); + u.host = value[1]; u.port = 53; diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c index e63418306..3d06f964f 100644 --- a/src/http/ngx_http_request.c +++ b/src/http/ngx_http_request.c @@ -1154,6 +1154,10 @@ ngx_http_alloc_large_header_buffer(ngx_http_request_t *r, r->args_start = new + (r->args_start - old); } + if (r->http_protocol.data) { + r->http_protocol.data = new + (r->http_protocol.data - old); + } + } else { r->header_name_start = new; r->header_name_end = new + (r->header_name_end - old); @@ -1335,13 +1339,6 @@ ngx_http_process_request_header(ngx_http_request_t *r) return NGX_ERROR; } - if (r->plain_http) { - ngx_log_error(NGX_LOG_INFO, r->connection->log, 0, - "client sent plain HTTP request to HTTPS port"); - ngx_http_finalize_request(r, NGX_HTTP_TO_HTTPS); - return NGX_ERROR; - } - if (r->headers_in.connection_type == NGX_HTTP_CONNECTION_KEEP_ALIVE) { if (r->headers_in.keep_alive) { r->headers_in.keep_alive_n = @@ -1409,6 +1406,13 @@ ngx_http_process_request(ngx_http_request_t *r) c = r->connection; + if (r->plain_http) { + ngx_log_error(NGX_LOG_INFO, c->log, 0, + "client sent plain HTTP request to HTTPS port"); + ngx_http_finalize_request(r, NGX_HTTP_TO_HTTPS); + return; + } + #if (NGX_HTTP_SSL) if (c->ssl) { diff --git a/src/http/ngx_http_special_response.c b/src/http/ngx_http_special_response.c index 20a8fa75d..5671f9bb7 100644 --- a/src/http/ngx_http_special_response.c +++ b/src/http/ngx_http_special_response.c @@ -307,7 +307,7 @@ static ngx_str_t ngx_http_error_pages[] = { ngx_string(ngx_http_error_495_page), /* 495, https certificate error */ ngx_string(ngx_http_error_496_page), /* 496, https no certificate */ ngx_string(ngx_http_error_497_page), /* 497, http to https */ - ngx_string(ngx_http_error_404_page), /* 498, invalid host name */ + ngx_string(ngx_http_error_404_page), /* 498, canceled */ ngx_null_string, /* 499, client has closed connection */ ngx_string(ngx_http_error_500_page), diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c index 7901bb667..e51638b56 100644 --- a/src/http/ngx_http_upstream.c +++ b/src/http/ngx_http_upstream.c @@ -398,13 +398,6 @@ ngx_http_upstream_init(ngx_http_request_t *r) } } - if (clcf->resolver == NULL) { - ngx_log_error(NGX_LOG_ERR, c->log, 0, - "no resolver defined to resolve %V", host); - ngx_http_finalize_request(r, NGX_HTTP_BAD_GATEWAY); - return; - } - temp.name = *host; ctx = ngx_resolve_start(clcf->resolver, &temp); @@ -413,6 +406,14 @@ ngx_http_upstream_init(ngx_http_request_t *r) return; } + if (ctx == NGX_NO_RESOLVER) { + ngx_log_error(NGX_LOG_ERR, c->log, 0, + "no resolver defined to resolve %V", host); + + ngx_http_finalize_request(r, NGX_HTTP_BAD_GATEWAY); + return; + } + ctx->name = *host; ctx->type = NGX_RESOLVE_A; ctx->handler = ngx_http_upstream_resolve_handler; |