Static resource failed to pass through cookie
map $cookie_test_debug $forward_to_gray { # forward to gray1 9cb88042edc55bf85c22e89cf880c63b 10.0.0.1; } location ~ ^/test/ { root /data/www/project; index index.html; if ( $uri !~ (css|js)$ ) { rewrite ^.*$ /test/index.html break; } if ( $forward_to_gray != '' ) { proxy_pass http://$forward_to_gray$request_uri; break; } } location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; try_files $uri $uri/ /index.php?$query_string; if ( $forward_to_gray != '' ) { proxy_pass http://$forward_to_gray$request_uri; break; } } ___ nginx mailing list nginx@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx
"Придержать" соединения на время
Есть ли возможность при недоступности бэка (временной, буквально на пару секунд) на клиент не отдавать сразу '502 Bad Gateway', а повторить попытку через Х секунд удерживаю при этом коннект с клиентом? Я так понимаю из коробки такой возможности нет, но может это можно сделать через lua/nginJs? ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: "Придержать" соединения на время
On Thu, Aug 08, 2019 at 11:17:17AM +0400, Алексей Сундуков wrote: >Есть ли возможность при недоступности бэка (временной, буквально на пару >секунд) на клиент не отдавать сразу '502 Bad Gateway', а повторить попытку >через Х секунд удерживаю при этом коннект с клиентом? Какой именно недоступности? Если бэкенд не отвечает, то ядро ОС продолжает ретрасмиссии, до таймаута. Увеличьте таймаут. Если бэкенд отвечает RST, потому что сервис на нём не запущен, то подумайте, как правильно поднимать сервис, чтобы такого не было. Если же он отвечает RST из-за перегрузки (переполнение backlog'a), лучше всего выбросить винду с её кривой сетью и поставить бэкенд на юникс. В крайнем случае можно просто зарубить все RST от виндового сервиса пакетным фильтром, тогда обрывы коннекций превратятся в таймауты. >Я так понимаю из коробки такой возможности нет, но может это можно сделать >через lua/nginJs? -- Eugene Berdnikov ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: "Придержать" соединения на время
видимо, речь идет про https://nginx.org/ru/docs/http/ngx_http_upstream_module.html#queue аналогичный механизм есть в haproxy https://cbonte.github.io/haproxy-dconv/1.7/configuration.html#4.2-maxconn чт, 8 авг. 2019 г. в 12:17, Алексей Сундуков : > Есть ли возможность при недоступности бэка (временной, буквально на пару > секунд) на клиент не отдавать сразу '502 Bad Gateway', а повторить попытку > через Х секунд удерживаю при этом коннект с клиентом? > > Я так понимаю из коробки такой возможности нет, но может это можно сделать > через lua/nginJs? > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
[njs] Added support for accessor properties in JSON.stringify().
details: https://hg.nginx.org/njs/rev/239f3511397b branches: changeset: 1118:239f3511397b user: Dmitry Volyntsev date: Thu Aug 08 14:19:56 2019 +0300 description: Added support for accessor properties in JSON.stringify(). This closes #203 issue on Github. diffstat: src/njs_json.c | 27 ++- src/test/njs_unit_test.c | 8 2 files changed, 30 insertions(+), 5 deletions(-) diffs (62 lines): diff -r fd09c657f97d -r 239f3511397b src/njs_json.c --- a/src/njs_json.cThu Aug 08 14:19:55 2019 +0300 +++ b/src/njs_json.cThu Aug 08 14:19:56 2019 +0300 @@ -1214,7 +1214,7 @@ njs_json_stringify_iterator(njs_vm_t *vm njs_value_t *key, *value; njs_function_t *to_json; njs_json_state_t*state; -njs_object_prop_t *prop; +njs_object_prop_t *prop, scratch; njs_lvlhsh_query_t lhq; start: @@ -1255,10 +1255,27 @@ start: prop = lhq.value; -if (!prop->enumerable -|| njs_is_undefined(>value) -|| !njs_is_valid(>value) -|| njs_is_function(>value)) +if (!prop->enumerable) { +break; +} + +if (njs_is_accessor_descriptor(prop) +&& njs_is_function(>getter)) +{ +scratch = *prop; +prop = + +ret = njs_function_apply(vm, njs_function(>getter), + >value, 1, >value); + +if (njs_slow_path(ret != NJS_OK)) { +return ret; +} +} + +if (njs_is_undefined(>value) +|| njs_is_function(>value) +|| !njs_is_valid(>value)) { break; } diff -r fd09c657f97d -r 239f3511397b src/test/njs_unit_test.c --- a/src/test/njs_unit_test.c Thu Aug 08 14:19:55 2019 +0300 +++ b/src/test/njs_unit_test.c Thu Aug 08 14:19:56 2019 +0300 @@ -12766,6 +12766,14 @@ static njs_unit_test_t njs_test[] = { njs_str("JSON.stringify([{a:1,b:{c:2}},1], undefined, new Date())"), njs_str("[{\"a\":1,\"b\":{\"c\":2}},1]") }, +{ njs_str("var o = Object.defineProperty({}, 'a', { get() { return ()=> 1}, enumerable: true });" + "JSON.stringify(o)"), + njs_str("{}") }, + +{ njs_str("var o = Object.defineProperty({}, 'a', { get: () => ({b:1, c:2}), enumerable: true });" + "JSON.stringify(o)"), + njs_str("{\"a\":{\"b\":1,\"c\":2}}") }, + { njs_str("JSON.stringify({toJSON:function(k){}})"), njs_str("undefined") }, ___ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel
[njs] Fixed njs_is_accessor_descriptor().
details: https://hg.nginx.org/njs/rev/6caf4d7c0846 branches: changeset: 1116:6caf4d7c0846 user: Dmitry Volyntsev date: Thu Aug 08 14:19:54 2019 +0300 description: Fixed njs_is_accessor_descriptor(). diffstat: src/njs_object.h | 3 ++- src/njs_value.h | 4 2 files changed, 6 insertions(+), 1 deletions(-) diffs (27 lines): diff -r e47f82b5f2ca -r 6caf4d7c0846 src/njs_object.h --- a/src/njs_object.h Mon Aug 05 17:10:59 2019 +0300 +++ b/src/njs_object.h Thu Aug 08 14:19:54 2019 +0300 @@ -13,7 +13,8 @@ #define njs_is_accessor_descriptor(prop) \ -(njs_is_valid(&(prop)->getter) || njs_is_valid(&(prop)->setter)) +(njs_is_function_or_undefined(&(prop)->getter)\ + || njs_is_function_or_undefined(&(prop)->setter)) #define njs_is_generic_descriptor(prop) \ diff -r e47f82b5f2ca -r 6caf4d7c0846 src/njs_value.h --- a/src/njs_value.h Mon Aug 05 17:10:59 2019 +0300 +++ b/src/njs_value.h Thu Aug 08 14:19:54 2019 +0300 @@ -537,6 +537,10 @@ typedef struct { ((value)->type == NJS_FUNCTION) +#define njs_is_function_or_undefined(value) \ +((value)->type == NJS_FUNCTION || (value)->type == NJS_UNDEFINED) + + #define njs_is_regexp(value) \ ((value)->type == NJS_REGEXP) ___ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel
[njs] Added support for accessor property descriptors in njs.dump().
details: https://hg.nginx.org/njs/rev/fd09c657f97d branches: changeset: 1117:fd09c657f97d user: Dmitry Volyntsev date: Thu Aug 08 14:19:55 2019 +0300 description: Added support for accessor property descriptors in njs.dump(). diffstat: src/njs_json.c | 17 + src/test/njs_unit_test.c | 9 + 2 files changed, 26 insertions(+), 0 deletions(-) diffs (53 lines): diff -r 6caf4d7c0846 -r fd09c657f97d src/njs_json.c --- a/src/njs_json.cThu Aug 08 14:19:54 2019 +0300 +++ b/src/njs_json.cThu Aug 08 14:19:55 2019 +0300 @@ -2381,6 +2381,10 @@ njs_vm_value_dump(njs_vm_t *vm, njs_str_ njs_lvlhsh_query_tlhq; njs_json_stringify_t *stringify; +const njs_value_t string_get = njs_string("[Getter]"); +const njs_value_t string_set = njs_string("[Setter]"); +const njs_value_t string_get_set = njs_long_string("[Getter/Setter]"); + if (njs_vm_backtrace(vm) != NULL) { goto exception; } @@ -2486,6 +2490,19 @@ njs_vm_value_dump(njs_vm_t *vm, njs_str_ if (prop->type == NJS_WHITEOUT || !prop->enumerable) { break; } + +if (njs_is_accessor_descriptor(prop)) { +if (njs_is_defined(>getter)) { +if (njs_is_defined(>setter)) { +val = njs_value_arg(_get_set); +} else { +val = njs_value_arg(_get); +} + +} else { +val = njs_value_arg(_set); +} +} } if (state->written) { diff -r 6caf4d7c0846 -r fd09c657f97d src/test/njs_unit_test.c --- a/src/test/njs_unit_test.c Thu Aug 08 14:19:54 2019 +0300 +++ b/src/test/njs_unit_test.c Thu Aug 08 14:19:55 2019 +0300 @@ -12893,6 +12893,15 @@ static njs_unit_test_t njs_test[] = { njs_str("njs.dump(Array.prototype.slice.call({'1':'b', length:2}))"), njs_str("[,'b']") }, +{ njs_str("var o = Object.defineProperty({}, 'a', { get: () => 1, enumerable: true }); njs.dump(o)"), + njs_str("{a:'[Getter]'}") }, + +{ njs_str("var o = Object.defineProperty({}, 'a', { get: () => 1, set(){}, enumerable: true }); njs.dump(o)"), + njs_str("{a:'[Getter/Setter]'}") }, + +{ njs_str("var o = Object.defineProperty({}, 'a', { set(){}, enumerable: true }); njs.dump(o)"), + njs_str("{a:'[Setter]'}") }, + { njs_str("njs.dump($r.props)"), njs_str("{a:{type:\"property\",props:[\"getter\"]},b:{type:\"property\",props:[\"getter\"]}}") }, ___ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel