nginx-0.1.39-RELEASE import
*) The changes in the ngx_http_charset_module: the "default_charset"
directive was canceled; the "charset" directive sets the response
charset; the "source_charset" directive sets the source charset only.
*) Bugfix: the backend "WWW-Authenticate" header line did not
transferred while the 401 response code redirecting.
*) Bugfix: the ngx_http_proxy_module and ngx_http_fastcgi_module may
close a connection before anything was transferred to a client; the
bug had appeared in 0.1.38.
*) Workaround: the Linux glibc crypt_r() initialization bug.
*) Bugfix: the ngx_http_ssi_module did not support the relative URI in
the "include virtual" command.
*) Bugfix: if the backend response had the "Location" header line and
nginx should not rewrite this line, then the 500 code response body
was transferred; the bug had appeared in 0.1.29.
*) Bugfix: some directives of the ngx_http_proxy_module and
ngx_http_fastcgi_module were not inherited from the server to the
location level; the bug had appeared in 0.1.29.
*) Bugfix: the ngx_http_ssl_module did not support the certificate
chain.
*) Bugfix: the ngx_http_autoindex_module did not show correctly the
long file names; the bug had appeared in 0.1.38.
*) Bugfixes in IMAP/POP3 proxy in interaction with a backend at the
login state.
diff --git a/src/http/modules/ngx_http_proxy_module.c b/src/http/modules/ngx_http_proxy_module.c
index 85503d0..92605e0 100644
--- a/src/http/modules/ngx_http_proxy_module.c
+++ b/src/http/modules/ngx_http_proxy_module.c
@@ -219,7 +219,7 @@
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
ngx_conf_set_size_slot,
NGX_HTTP_LOC_CONF_OFFSET,
- offsetof(ngx_http_proxy_loc_conf_t, upstream.busy_buffers_size),
+ offsetof(ngx_http_proxy_loc_conf_t, upstream.busy_buffers_size_conf),
NULL },
{ ngx_string("proxy_temp_path"),
@@ -233,14 +233,14 @@
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
ngx_conf_set_size_slot,
NGX_HTTP_LOC_CONF_OFFSET,
- offsetof(ngx_http_proxy_loc_conf_t, upstream.max_temp_file_size),
+ offsetof(ngx_http_proxy_loc_conf_t, upstream.max_temp_file_size_conf),
NULL },
{ ngx_string("proxy_temp_file_write_size"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
ngx_conf_set_size_slot,
NGX_HTTP_LOC_CONF_OFFSET,
- offsetof(ngx_http_proxy_loc_conf_t, upstream.temp_file_write_size),
+ offsetof(ngx_http_proxy_loc_conf_t, upstream.temp_file_write_size_conf),
NULL },
{ ngx_string("proxy_next_upstream"),
@@ -720,21 +720,21 @@
return NGX_OK;
}
- r->headers_out.status = p->status;
+ u->headers_in.status_n = p->status;
u->state->status = p->status;
- r->headers_out.status_line.len = p->status_end - p->status_start;
- r->headers_out.status_line.data = ngx_palloc(r->pool,
- r->headers_out.status_line.len);
- if (r->headers_out.status_line.data == NULL) {
+ u->headers_in.status_line.len = p->status_end - p->status_start;
+ u->headers_in.status_line.data = ngx_palloc(r->pool,
+ u->headers_in.status_line.len);
+ if (u->headers_in.status_line.data == NULL) {
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
- ngx_memcpy(r->headers_out.status_line.data, p->status_start,
- r->headers_out.status_line.len);
+ ngx_memcpy(u->headers_in.status_line.data, p->status_start,
+ u->headers_in.status_line.len);
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
"http proxy status %ui \"%V\"",
- r->headers_out.status, &r->headers_out.status_line);
+ u->headers_in.status, &u->headers_in.status_line);
u->process_header = ngx_http_proxy_process_header;
@@ -1301,9 +1301,10 @@
conf->upstream.send_lowat = NGX_CONF_UNSET_SIZE;
conf->upstream.header_buffer_size = NGX_CONF_UNSET_SIZE;
- conf->upstream.busy_buffers_size = NGX_CONF_UNSET_SIZE;
- conf->upstream.max_temp_file_size = NGX_CONF_UNSET_SIZE;
- conf->upstream.temp_file_write_size = NGX_CONF_UNSET_SIZE;
+
+ conf->upstream.busy_buffers_size_conf = NGX_CONF_UNSET_SIZE;
+ conf->upstream.max_temp_file_size_conf = NGX_CONF_UNSET_SIZE;
+ conf->upstream.temp_file_write_size_conf = NGX_CONF_UNSET_SIZE;
conf->upstream.pass_unparsed_uri = NGX_CONF_UNSET;
conf->upstream.method = NGX_CONF_UNSET_UINT;
@@ -1374,23 +1375,28 @@
}
- ngx_conf_merge_size_value(conf->upstream.busy_buffers_size,
- prev->upstream.busy_buffers_size,
+ ngx_conf_merge_size_value(conf->upstream.busy_buffers_size_conf,
+ prev->upstream.busy_buffers_size_conf,
NGX_CONF_UNSET_SIZE);
- if (conf->upstream.busy_buffers_size == NGX_CONF_UNSET_SIZE) {
+ if (conf->upstream.busy_buffers_size_conf == NGX_CONF_UNSET_SIZE) {
conf->upstream.busy_buffers_size = 2 * size;
-
- } else if (conf->upstream.busy_buffers_size < size) {
+ } else {
+ conf->upstream.busy_buffers_size =
+ conf->upstream.busy_buffers_size_conf;
+ }
+
+ if (conf->upstream.busy_buffers_size < size) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"\"proxy_busy_buffers_size\" must be equal or bigger than "
"maximum of the value of \"proxy_header_buffer_size\" and "
"one of the \"proxy_buffers\"");
return NGX_CONF_ERROR;
+ }
- } else if (conf->upstream.busy_buffers_size
- > (conf->upstream.bufs.num - 1) * conf->upstream.bufs.size)
+ if (conf->upstream.busy_buffers_size
+ > (conf->upstream.bufs.num - 1) * conf->upstream.bufs.size)
{
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"\"proxy_busy_buffers_size\" must be less than "
@@ -1398,16 +1404,20 @@
return NGX_CONF_ERROR;
}
-
- ngx_conf_merge_size_value(conf->upstream.temp_file_write_size,
- prev->upstream.temp_file_write_size,
+
+ ngx_conf_merge_size_value(conf->upstream.temp_file_write_size_conf,
+ prev->upstream.temp_file_write_size_conf,
NGX_CONF_UNSET_SIZE);
- if (conf->upstream.temp_file_write_size == NGX_CONF_UNSET_SIZE) {
+ if (conf->upstream.temp_file_write_size_conf == NGX_CONF_UNSET_SIZE) {
conf->upstream.temp_file_write_size = 2 * size;
-
- } else if (conf->upstream.temp_file_write_size < size) {
+ } else {
+ conf->upstream.temp_file_write_size =
+ conf->upstream.temp_file_write_size_conf;
+ }
+
+ if (conf->upstream.temp_file_write_size < size) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"\"proxy_temp_file_write_size\" must be equal or bigger than "
"maximum of the value of \"proxy_header_buffer_size\" and "
@@ -1416,17 +1426,19 @@
return NGX_CONF_ERROR;
}
-
- ngx_conf_merge_size_value(conf->upstream.max_temp_file_size,
- prev->upstream.max_temp_file_size,
+ ngx_conf_merge_size_value(conf->upstream.max_temp_file_size_conf,
+ prev->upstream.max_temp_file_size_conf,
NGX_CONF_UNSET_SIZE);
- if (conf->upstream.max_temp_file_size == NGX_CONF_UNSET_SIZE) {
-
+ if (conf->upstream.max_temp_file_size_conf == NGX_CONF_UNSET_SIZE) {
conf->upstream.max_temp_file_size = 1024 * 1024 * 1024;
+ } else {
+ conf->upstream.max_temp_file_size =
+ conf->upstream.max_temp_file_size_conf;
+ }
- } else if (conf->upstream.max_temp_file_size != 0
- && conf->upstream.max_temp_file_size < size)
+ if (conf->upstream.max_temp_file_size != 0
+ && conf->upstream.max_temp_file_size < size)
{
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"\"fastcgi_max_temp_file_size\" must be equal to zero to disable "
@@ -1437,6 +1449,7 @@
return NGX_CONF_ERROR;
}
+
ngx_conf_merge_bitmask_value(conf->upstream.next_upstream,
prev->upstream.next_upstream,
(NGX_CONF_BITMASK_SET
@@ -1448,7 +1461,7 @@
NGX_HTTP_PROXY_TEMP_PATH, 1, 2, 0,
ngx_garbage_collector_temp_handler, cf);
- ngx_conf_merge_msec_value(conf->upstream.pass_unparsed_uri,
+ ngx_conf_merge_value(conf->upstream.pass_unparsed_uri,
prev->upstream.pass_unparsed_uri, 0);
if (conf->upstream.pass_unparsed_uri && conf->upstream.location->len > 1) {
@@ -1467,14 +1480,14 @@
ngx_conf_merge_value(conf->upstream.pass_request_body,
prev->upstream.pass_request_body, 1);
- ngx_conf_merge_msec_value(conf->upstream.redirect_errors,
+ ngx_conf_merge_value(conf->upstream.redirect_errors,
prev->upstream.redirect_errors, 0);
- ngx_conf_merge_msec_value(conf->upstream.pass_x_powered_by,
+ ngx_conf_merge_value(conf->upstream.pass_x_powered_by,
prev->upstream.pass_x_powered_by, 1);
- ngx_conf_merge_msec_value(conf->upstream.pass_server,
+ ngx_conf_merge_value(conf->upstream.pass_server,
prev->upstream.pass_server, 0);
- ngx_conf_merge_msec_value(conf->upstream.pass_x_accel_expires,
+ ngx_conf_merge_value(conf->upstream.pass_x_accel_expires,
prev->upstream.pass_x_accel_expires, 0);
@@ -1508,7 +1521,6 @@
if (conf->peers == NULL) {
conf->peers = prev->peers;
- conf->upstream = prev->upstream;
}
if (conf->headers_source == NULL) {