在 nginx 代理中使用 open-resty lua 脚本配置 LRU 缓存的最佳方法是什么

What's the best way to configure LRU cache using open-resty lua scripts in nginx proxy

我正在使用 openresty lua (https://github.com/openresty) 来配置我们的 nginx 代理。我有一个 main proxy.template 定义了 3 个位置,但只想使用一个 LRU 缓存来进行多个进程初始化调用(因为它们花费了很长时间,没有别的,这就是我使用脚本的原因)。我想定义一个可以传递到每个位置的变量,但我很确定我没有正确执行此操作。我有:

  #init_by_lua_file $lru_cache /etc/scripts/lua/process_cache.lua;

  location /process {
      access_by_lua_file /etc/scripts/lua/process_access.lua;

      proxy_set_header Content-Type "application/json";
      proxy_set_header Accept "application/json";

      proxy_ssl_server_name      on;

      proxy_pass $target;
  }

  location /process/init {
      set_by_lua_file $lru_cache /etc/scripts/lua/process_cache.lua;

      add_header Access-Control-Expose-Headers set-cookie;
      add_header Access-Control-Allow-Headers set-cookie;

      access_by_lua_file /etc/scripts/lua/process_init.lua;
  }

process_cache 创建缓存(每个代理启动一个缓存),我希望它被执行不同操作的 process_init.lua 和 process_access.lua 引用。例如,process_init 只为 UI 初始化调用一次并建立特定的缓存条目,process_access 检查以确保条目没有过期,如果没有使用它,否则创建一个新条目,这样就不需要对另一台服务器进行长时间调用。

以上要求在两个位置之间传递 lru_cache 变量。我最近的尝试是尝试将 process_cache.lua 放置在 /process/init 路径中,但每次都会初始化它,因此每次 /process/init 调用都从空缓存开始是无用的。想法?

考虑ngx.shared? 您可以为您的字符串指定 exptime。

: https://github.com/openresty/lua-nginx-module#ngxshareddict ?