有没有可能在nginx的javascript模块中持久化一些数据?我需要保护请求中的一些数据,以验证是否允许以下请求。
ecfsfe2w1#
我会尝试通过写一个文件并阅读它来使用它。https://github.com/nginx/njs/issues/75这里有人正在使用它。第二个想法是尝试将它设置为nginx变量或其他东西。https://www.docs4dev.com/docs/en/nginx/current/reference/http-ngx_http_js_module.html
9w11ddsr2#
我建议使用ngx_http_keyval_module,它允许在共享内存中保存键值字典,所有请求和工作者都可以使用。看一下每个客户端IP的请求数示例。
nginx配置文件
... 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; } } }
请求模块数.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
2条答案
按热度按时间ecfsfe2w1#
我会尝试通过写一个文件并阅读它来使用它。https://github.com/nginx/njs/issues/75这里有人正在使用它。第二个想法是尝试将它设置为nginx变量或其他东西。https://www.docs4dev.com/docs/en/nginx/current/reference/http-ngx_http_js_module.html
9w11ddsr2#
我建议使用ngx_http_keyval_module,它允许在共享内存中保存键值字典,所有请求和工作者都可以使用。
看一下每个客户端IP的请求数示例。
nginx配置文件
请求模块数.js:
正在检查: