Nginx Lua Caching and removing unwanted Arguements for higher HIT ratio issue
c0nw0nk
nginx-forum at forum.nginx.org
Wed Jul 11 14:48:01 UTC 2018
So my issue is mostly directed towards Yichun Zhang (agentzh) if he is still
active here. I hope so.
My problem is I am trying to increase my Cache HIT ratio by removing
arguments from the URL that are fake / unwanted and order the arguments in a
alphabetical (same order every time) for a higher Cache HIT ratio.
Here is my code.
location ~ \.php$ { ##within the PHP location block
## Create fastcgi_param vars
# remove duplicate values like index.php?variable=value&&&&&etc from URL's
for higher cache hit ratio
set_by_lua_block $cache_request_uri {
local function fix_url(s,C)
for c in C:gmatch(".") do
s=s:gsub(c.."+",c)
end
return s
end
return string.lower(fix_url(ngx.var.request_uri, "+/=&?;~*@$,:"))
}
#TODO : Order request body variables so they are the same order for higher
cache hit ratio
set_by_lua_block $cache_request_body { return ngx.var.request_body }
# Order Arguement variables for higher cache hit ratio and remove any custom
defined arguements that users may be using to bypass cache in an attempt of
DoS.
set_by_lua_block $cache_request_uri {
ngx.log(ngx.ERR, "before error: ", ngx.var.request_uri)
ngx.log(ngx.ERR, "test: ", ngx.var.uri)
local function has_value (tab, val)
for index, value in ipairs(tab) do
-- We grab the first index of our sub-table instead
if string.lower(value) == string.lower(val) then
return true
end
end
return false
end
--Anti-DDoS and Remove arguements from URLs
local args = ngx.req.get_uri_args()
local remove_args_table = { --table of blacklisted arguement to remove from
url to stop DoS and increase Cache HIT ratio.
"rnd",
"rand",
"random",
"ddos",
"dddddooooossss",
"randomz",
}
for key,value in pairs(args) do
if has_value(remove_args_table, value) then
--print 'Yep'
--print(value .. " ")
ngx.log(ngx.ERR, "error: ", key .. " | " .. value)
args[key] = nil --remove the arguement from the args table
else
--print 'Nope'
end
end
--ngx.req.set_uri_args(args)
--for k,v in pairs(args) do --[[print(k,v)]] ngx.log(ngx.ERR, "error: ", k
.. " | " .. v) end
ngx.log(ngx.ERR, "after error: ", ngx.var.request_uri)
--return ngx.req.set_uri_args(args)
return ngx.var.uri .. args
--Anti-DDoS and Remove arguements from URLs
}
fastcgi_cache microcache;
fastcgi_cache_key
"$scheme$host$cache_request_uri$request_method$cache_request_body";
fastcgi_param REQUEST_URI $cache_request_uri; #need to make sure that web
application URI has been modified by Lua
Posted at Nginx Forum: https://forum.nginx.org/read.php?2,280500,280500#msg-280500
More information about the nginx
mailing list