Merge branch 'nginx' (nginx-1.17.1). Change-Id: Idde8cd7a88b495231be95a1d1ab5924f36baecb4 Signed-off-by: Piotr Sikora <piotrsikora@google.com>
diff --git a/.hgtags b/.hgtags index 5dd625b..10adccb 100644 --- a/.hgtags +++ b/.hgtags
@@ -439,3 +439,4 @@ 5155d0296a5ef9841f035920527ffdb771076b44 release-1.15.11 0130ca3d58437b3c7c707cdddd813d530c68da9a release-1.15.12 054c1c46395caff79bb4caf16f40b331f71bb6dd release-1.17.0 +7816bd7dabf6ee86c53c073b90a7143161546e06 release-1.17.1
diff --git a/BUILD b/BUILD index 076b3b4..6d525ff 100644 --- a/BUILD +++ b/BUILD
@@ -1520,5 +1520,5 @@ preinst = "@nginx_pkgoss//:debian_preinst", prerm = "@nginx_pkgoss//:debian_prerm", section = "httpd", - version = "1.17.0", + version = "1.17.1", )
diff --git a/build.bzl b/build.bzl index 609ad51..ab28273 100644 --- a/build.bzl +++ b/build.bzl
@@ -673,9 +673,9 @@ name = "nginx_pkgoss", build_file_content = _PKGOSS_BUILD_FILE.format(nginx = nginx) + _PKGOSS_BUILD_FILE_TAIL, - commit = "395fb9664e0dac1bd7a8810bebdff867f9619aaa", # nginx-1.17.0 + commit = "daeedba4e4b391c95274826cadc8710435c60845", # nginx-1.17.1 remote = "https://nginx.googlesource.com/nginx-pkgoss", - shallow_since = "1558450033 +0300", + shallow_since = "1561466004 +0300", ) def nginx_repositories_zlib(bind):
diff --git a/docs/xml/nginx/changes.xml b/docs/xml/nginx/changes.xml index ae034bb..5963cd7 100644 --- a/docs/xml/nginx/changes.xml +++ b/docs/xml/nginx/changes.xml
@@ -5,6 +5,62 @@ <change_log title="nginx"> +<changes ver="1.17.1" date="2019-06-25"> + +<change type="feature"> +<para lang="ru"> +директива limit_req_dry_run. +</para> +<para lang="en"> +the "limit_req_dry_run" directive. +</para> +</change> + +<change type="feature"> +<para lang="ru"> +при использовании директивы hash в блоке upstream +пустой ключ хэширования теперь приводит к переключению +на round-robin балансировку.<br/> +Спасибо Niklas Keller. +</para> +<para lang="en"> +when using the "hash" directive inside the "upstream" block +an empty hash key now triggers round-robin balancing.<br/> +Thanks to Niklas Keller. +</para> +</change> + +<change type="bugfix"> +<para lang="ru"> +в рабочем процессе мог произойти segmentation fault, +если использовалось кэширование и директива image_filter, +а ошибки с кодом 415 перенаправлялись с помощь директивы error_page; +ошибка появилась в 1.11.10. +</para> +<para lang="en"> +a segmentation fault might occur in a worker process +if caching was used along with the "image_filter" directive, +and errors with code 415 were redirected with the "error_page" directive; +the bug had appeared in 1.11.10. +</para> +</change> + +<change type="bugfix"> +<para lang="ru"> +в рабочем процессе мог произойти segmentation fault, +если использовался встроенный перл; +ошибка появилась в 1.7.3. +</para> +<para lang="en"> +a segmentation fault might occur in a worker process +if embedded perl was used; +the bug had appeared in 1.7.3. +</para> +</change> + +</changes> + + <changes ver="1.17.0" date="2019-05-21"> <change type="feature">
diff --git a/misc/GNUmakefile b/misc/GNUmakefile index 0391a31..2a34ae5 100644 --- a/misc/GNUmakefile +++ b/misc/GNUmakefile
@@ -6,7 +6,7 @@ CC = cl OBJS = objs.msvc8 -OPENSSL = openssl-1.1.1b +OPENSSL = openssl-1.1.1c ZLIB = zlib-1.2.11 PCRE = pcre-8.43
diff --git a/src/core/nginx.h b/src/core/nginx.h index 644de51..ae2eec5 100644 --- a/src/core/nginx.h +++ b/src/core/nginx.h
@@ -13,8 +13,8 @@ #define NGINX_NAME "nginx" #endif -#define nginx_version 1017000 -#define NGINX_VERSION "1.17.0" +#define nginx_version 1017001 +#define NGINX_VERSION "1.17.1" #define NGINX_VER NGINX_NAME "/" NGINX_VERSION #ifdef NGX_BUILD
diff --git a/src/http/modules/ngx_http_limit_req_module.c b/src/http/modules/ngx_http_limit_req_module.c index e81d57f..8064522 100644 --- a/src/http/modules/ngx_http_limit_req_module.c +++ b/src/http/modules/ngx_http_limit_req_module.c
@@ -53,6 +53,7 @@ ngx_uint_t limit_log_level; ngx_uint_t delay_log_level; ngx_uint_t status_code; + ngx_flag_t dry_run; } ngx_http_limit_req_conf_t; @@ -118,6 +119,13 @@ offsetof(ngx_http_limit_req_conf_t, status_code), &ngx_http_limit_req_status_bounds }, + { ngx_string("limit_req_dry_run"), + NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG, + ngx_conf_set_flag_slot, + NGX_HTTP_LOC_CONF_OFFSET, + offsetof(ngx_http_limit_req_conf_t, dry_run), + NULL }, + ngx_null_command }; @@ -230,9 +238,10 @@ if (rc == NGX_BUSY) { ngx_log_error(lrcf->limit_log_level, r->connection->log, 0, - "limiting requests, excess: %ui.%03ui by zone \"%V\"", - excess / 1000, excess % 1000, - &limit->shm_zone->shm.name); + "limiting requests%s, excess: %ui.%03ui by zone \"%V\"", + lrcf->dry_run ? ", dry run" : "", + excess / 1000, excess % 1000, + &limit->shm_zone->shm.name); } while (n--) { @@ -251,6 +260,10 @@ ctx->node = NULL; } + if (lrcf->dry_run) { + return NGX_DECLINED; + } + return lrcf->status_code; } @@ -267,9 +280,14 @@ } ngx_log_error(lrcf->delay_log_level, r->connection->log, 0, - "delaying request, excess: %ui.%03ui, by zone \"%V\"", + "delaying request%s, excess: %ui.%03ui, by zone \"%V\"", + lrcf->dry_run ? ", dry run" : "", excess / 1000, excess % 1000, &limit->shm_zone->shm.name); + if (lrcf->dry_run) { + return NGX_DECLINED; + } + if (ngx_handle_read_event(r->connection->read, 0) != NGX_OK) { return NGX_HTTP_INTERNAL_SERVER_ERROR; } @@ -711,6 +729,7 @@ conf->limit_log_level = NGX_CONF_UNSET_UINT; conf->status_code = NGX_CONF_UNSET_UINT; + conf->dry_run = NGX_CONF_UNSET; return conf; } @@ -735,6 +754,8 @@ ngx_conf_merge_uint_value(conf->status_code, prev->status_code, NGX_HTTP_SERVICE_UNAVAILABLE); + ngx_conf_merge_value(conf->dry_run, prev->dry_run, 0); + return NGX_CONF_OK; }
diff --git a/src/http/modules/ngx_http_upstream_hash_module.c b/src/http/modules/ngx_http_upstream_hash_module.c index 6c247b5..e741eb2 100644 --- a/src/http/modules/ngx_http_upstream_hash_module.c +++ b/src/http/modules/ngx_http_upstream_hash_module.c
@@ -178,7 +178,7 @@ ngx_http_upstream_rr_peers_rlock(hp->rrp.peers); - if (hp->tries > 20 || hp->rrp.peers->single) { + if (hp->tries > 20 || hp->rrp.peers->single || hp->key.len == 0) { ngx_http_upstream_rr_peers_unlock(hp->rrp.peers); return hp->get_rr_peer(pc, &hp->rrp); } @@ -509,7 +509,7 @@ ngx_http_upstream_rr_peers_wlock(hp->rrp.peers); - if (hp->tries > 20 || hp->rrp.peers->single) { + if (hp->tries > 20 || hp->rrp.peers->single || hp->key.len == 0) { ngx_http_upstream_rr_peers_unlock(hp->rrp.peers); return hp->get_rr_peer(pc, &hp->rrp); }
diff --git a/src/http/modules/perl/nginx.xs b/src/http/modules/perl/nginx.xs index 9f847b3..0867e2a 100644 --- a/src/http/modules/perl/nginx.xs +++ b/src/http/modules/perl/nginx.xs
@@ -147,6 +147,8 @@ } } + r->disable_not_modified = 1; + (void) ngx_http_send_header(r);
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c index 8b2f2b3..05ff9b0 100644 --- a/src/http/ngx_http_upstream.c +++ b/src/http/ngx_http_upstream.c
@@ -597,10 +597,6 @@ u->cache_status = NGX_HTTP_CACHE_MISS; u->request_sent = 1; } - - if (ngx_http_upstream_cache_background_update(r, u) != NGX_OK) { - rc = NGX_ERROR; - } } if (rc != NGX_DECLINED) { @@ -902,9 +898,14 @@ || c->stale_updating) && !r->background && u->conf->cache_background_update) { - r->cache->background = 1; - u->cache_status = rc; - rc = NGX_OK; + if (ngx_http_upstream_cache_background_update(r, u) == NGX_OK) { + r->cache->background = 1; + u->cache_status = rc; + rc = NGX_OK; + + } else { + rc = NGX_ERROR; + } } break; @@ -1106,10 +1107,6 @@ { ngx_http_request_t *sr; - if (!r->cached || !r->cache->background) { - return NGX_OK; - } - if (r == r->main) { r->preserve_body = 1; }
diff --git a/src/stream/ngx_stream_upstream_hash_module.c b/src/stream/ngx_stream_upstream_hash_module.c index 4fa9a2d..b764fcb 100644 --- a/src/stream/ngx_stream_upstream_hash_module.c +++ b/src/stream/ngx_stream_upstream_hash_module.c
@@ -178,7 +178,7 @@ ngx_stream_upstream_rr_peers_rlock(hp->rrp.peers); - if (hp->tries > 20 || hp->rrp.peers->single) { + if (hp->tries > 20 || hp->rrp.peers->single || hp->key.len == 0) { ngx_stream_upstream_rr_peers_unlock(hp->rrp.peers); return hp->get_rr_peer(pc, &hp->rrp); } @@ -511,7 +511,7 @@ ngx_stream_upstream_rr_peers_wlock(hp->rrp.peers); - if (hp->tries > 20 || hp->rrp.peers->single) { + if (hp->tries > 20 || hp->rrp.peers->single || hp->key.len == 0) { ngx_stream_upstream_rr_peers_unlock(hp->rrp.peers); return hp->get_rr_peer(pc, &hp->rrp); }