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);
}