Сохранение модуля javascript в nginx
Можно ли сохранить некоторые данные в модуле javascript nginx?
Мне нужно сохранить некоторые данные из запроса, чтобы проверить, разрешены ли следующие запросы.
2 ответа
Я бы рекомендовал использовать ngx_http_keyval_module. это позволяет хранить словари ключ-значение в разделяемой памяти, доступной для всех запросов и воркеров.
Взгляните на количество запросов на пример клиентского IP.
nginx.conf
...
http {
js_path "/etc/nginx/njs/";
js_import num_requests_module from logging/num_requests_module.js;
js_set $num_requests num_requests_module.num_requests;
keyval_zone zone=foo:10m;
keyval $remote_addr $foo zone=foo;
log_format bar '$remote_addr [$time_local] $num_requests';
access_log logs/access.log bar;
server {
listen 80;
location / {
return 200;
}
}
}
num_requests_module.js:
function num_requests(r) {
var n = r.variables.foo; // read variable from the share memory
n = n ? Number(n) + 1 : 1;
r.variables.foo = n; // persist variable in the shared memory
return n;
}
export default {num_requests};
Проверка:
curl http://localhost/aa; curl http://localhost/aa; curl http://localhost/aa
curl --interface 127.0.0.2 http://localhost/aa; curl --interface 127.0.0.2 http://localhost/aa
docker logs njs_example
127.0.0.1 [22/Nov/2021:16:55:06 +0000] 1
127.0.0.1 [22/Nov/2021:16:55:07 +0000] 2
127.0.0.1 [22/Nov/2021:16:55:29 +0000] 3
127.0.0.2 [22/Nov/2021:18:20:24 +0000] 1
127.0.0.2 [22/Nov/2021:18:20:25 +0000] 2
Я бы попробовал использовать это, написав файл и прочитав его. https://github.com/nginx/njs/issues/75 Вот кто-то вроде его использует. Вторая идея - просто попытаться настроить ее как переменную nginx или что-то в этом роде. https://www.docs4dev.com/docs/en/nginx/current/reference/http-ngx_http_js_module.html