Static resource failed to pass through cookie

2019-08-08 Thread 姜伯洋
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

"Придержать" соединения на время

2019-08-08 Thread Алексей Сундуков
Есть ли возможность при недоступности бэка (временной, буквально на пару
секунд) на клиент не отдавать сразу '502 Bad Gateway', а повторить попытку
через Х секунд удерживаю при этом коннект с клиентом?

Я так понимаю из коробки такой возможности нет, но может это можно сделать
через lua/nginJs?
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: "Придержать" соединения на время

2019-08-08 Thread Evgeniy Berdnikov
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: "Придержать" соединения на время

2019-08-08 Thread Илья Шипицин
видимо, речь идет про

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().

2019-08-08 Thread Dmitry Volyntsev
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().

2019-08-08 Thread Dmitry Volyntsev
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().

2019-08-08 Thread Dmitry Volyntsev
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