在Nginx代理中使用开放式Lua脚本配置LRU缓存的最佳方法是什么

时间:2018-06-26 19:01:25

标签: nginx proxy lua openresty

我正在使用openresty lua(https://github.com/openresty)来配置我们的nginx代理。我有一个主要的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引用它。例如,对于UI初始化,仅调用一次process_init并建立特定的缓存条目,process_access检查以确保该条目未过期(如果未使用),否则将创建一个新条目,以便长时间调用另一台服务器不需要。

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

1 个答案:

答案 0 :(得分:1)

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

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