support v2 caching
This commit is contained in:
parent
45ce3de7c2
commit
60cb812148
|
@ -409,6 +409,13 @@ server {
|
||||||
proxy_pass http://siad;
|
proxy_pass http://siad;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
location /skynet/resolve {
|
||||||
|
include /etc/nginx/conf.d/include/cors;
|
||||||
|
|
||||||
|
proxy_set_header User-Agent: Sia-Agent;
|
||||||
|
proxy_pass http://siad;
|
||||||
|
}
|
||||||
|
|
||||||
location ~ "^/(([a-zA-Z0-9-_]{46}|[a-z0-9]{55})(/.*)?)$" {
|
location ~ "^/(([a-zA-Z0-9-_]{46}|[a-z0-9]{55})(/.*)?)$" {
|
||||||
include /etc/nginx/conf.d/include/cors;
|
include /etc/nginx/conf.d/include/cors;
|
||||||
include /etc/nginx/conf.d/include/proxy-buffer;
|
include /etc/nginx/conf.d/include/proxy-buffer;
|
||||||
|
@ -427,13 +434,24 @@ server {
|
||||||
set $skylink $2;
|
set $skylink $2;
|
||||||
set $path $3;
|
set $path $3;
|
||||||
|
|
||||||
|
# v2 support
|
||||||
|
set $skylink_v1 $skylink;
|
||||||
|
|
||||||
access_by_lua_block {
|
access_by_lua_block {
|
||||||
-- disable cache if this is skylink v2
|
-- disable cache if this is skylink v2
|
||||||
local isBase32v2 = string.len(ngx.var.skylink) == 55 and string.sub(ngx.var.skylink, 0, 2) == "04"
|
local isBase32v2 = string.len(ngx.var.skylink) == 55 and string.sub(ngx.var.skylink, 0, 2) == "04"
|
||||||
local isBase64v2 = string.len(ngx.var.skylink) == 46 and string.sub(ngx.var.skylink, 0, 2) == "AQ"
|
local isBase64v2 = string.len(ngx.var.skylink) == 46 and string.sub(ngx.var.skylink, 0, 2) == "AQ"
|
||||||
|
|
||||||
if isBase32v2 or isBase64v2 then
|
if isBase32v2 or isBase64v2 then
|
||||||
ngx.var.nocache = 1 # nginx expects 0/1 for boolean
|
local res = ngx.location.capture("/skynet/resolve/" .. ngx.var.skylink)
|
||||||
|
if res.status == ngx.HTTP_OK then
|
||||||
|
local json = require('cjson')
|
||||||
|
local resolve = json.decode(res.body)
|
||||||
|
ngx.var.skylink_v1 = resolve.skylink
|
||||||
|
else
|
||||||
|
ngx.say(res.body)
|
||||||
|
ngx.exit(res.status)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- this block runs only when accounts are enabled
|
-- this block runs only when accounts are enabled
|
||||||
|
@ -447,6 +465,16 @@ server {
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# in case siad returns location header and we have skylink v2, we need to replace the skylink v1 with v2
|
||||||
|
header_filter_by_lua_block {
|
||||||
|
if ngx.var.skylink != ngx.var.skylink_v1 then
|
||||||
|
if ngx.header.location then
|
||||||
|
ngx.header.location = ngx.header.location:gsub("^" .. ngx.var.skylink_v1, ngx.var.skylink)
|
||||||
|
end
|
||||||
|
ngx.header["Skynet-Skylink"] = ngx.var.skylink
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
# register the download in accounts service (cookies should contain jwt)
|
# register the download in accounts service (cookies should contain jwt)
|
||||||
log_by_lua_block {
|
log_by_lua_block {
|
||||||
-- this block runs only when accounts are enabled
|
-- this block runs only when accounts are enabled
|
||||||
|
|
Reference in New Issue