Files
kong--kong/kong/plugins/proxy-cache/schema.lua
T
2026-07-13 12:32:21 +08:00

112 lines
4.0 KiB
Lua

local strategies = require "kong.plugins.proxy-cache.strategies"
local typedefs = require "kong.db.schema.typedefs"
local ngx = ngx
local function check_shdict(name)
if not ngx.shared[name] then
return false, "missing shared dict '" .. name .. "'"
end
return true
end
return {
name = "proxy-cache",
fields = {
{ protocols = typedefs.protocols },
{ config = {
type = "record",
fields = {
{ response_code = { description = "Upstream response status code considered cacheable.", type = "array",
default = { 200, 301, 404 },
elements = { type = "integer", between = {100, 900} },
len_min = 1,
required = true,
}},
{ request_method = { description = "Downstream request methods considered cacheable.", type = "array",
default = { "GET", "HEAD" },
elements = {
type = "string",
one_of = { "HEAD", "GET", "POST", "PATCH", "PUT" },
},
required = true
}},
{ content_type = { description = "Upstream response content types considered cacheable. The plugin performs an **exact match** against each specified value.", type = "array",
default = { "text/plain","application/json" },
elements = { type = "string" },
required = true,
}},
{ cache_ttl = { description = "TTL, in seconds, of cache entities.", type = "integer",
default = 300,
gt = 0,
}},
{ strategy = { description = "The backing data store in which to hold cache entities.", type = "string",
one_of = strategies.STRATEGY_TYPES,
required = true,
}},
{ cache_control = { description = "When enabled, respect the Cache-Control behaviors defined in RFC7234.", type = "boolean",
default = false,
required = true,
}},
{ ignore_uri_case = {
type = "boolean",
default = false,
required = false,
}},
{ storage_ttl = { description = "Number of seconds to keep resources in the storage backend. This value is independent of `cache_ttl` or resource TTLs defined by Cache-Control behaviors.", type = "integer",
}},
{ memory = {
type = "record",
fields = {
{ dictionary_name = { description = "The name of the shared dictionary in which to hold cache entities when the memory strategy is selected. Note that this dictionary currently must be defined manually in the Kong Nginx template.", type = "string",
required = true,
default = "kong_db_cache",
}},
},
}},
{ vary_query_params = { description = "Relevant query parameters considered for the cache key. If undefined, all params are taken into consideration.", type = "array",
elements = { type = "string" },
}},
{ vary_headers = { description = "Relevant headers considered for the cache key. If undefined, none of the headers are taken into consideration.", type = "array",
elements = { type = "string" },
}},
{ response_headers = {
description = "Caching related diagnostic headers that should be included in cached responses",
type = "record",
fields = {
{ age = {type = "boolean", default = true} },
{ ["X-Cache-Status"] = {type = "boolean", default = true} },
{ ["X-Cache-Key"] = {type = "boolean", default = true} },
},
}},
},
}
},
},
entity_checks = {
{ custom_entity_check = {
field_sources = { "config" },
fn = function(entity)
local config = entity.config
if config.strategy == "memory" then
local ok, err = check_shdict(config.memory.dictionary_name)
if not ok then
return nil, err
end
end
return true
end
}},
},
}