在 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 ?
我正在使用 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 ?