Merge remote-tracking branch 'origin/master' into pin-endpoint
This commit is contained in:
commit
3cc3685273
|
@ -119,33 +119,6 @@ server {
|
|||
location /skynet/stats {
|
||||
include /etc/nginx/conf.d/include/cors;
|
||||
|
||||
set $response_body ''; # we need a variable for full response body (not chuncked)
|
||||
|
||||
# modify the response to add numfiles and totalsize to account for node rotation
|
||||
# example prevstats.lua: 'return { numfiles = 12345, totalsize = 123456789 }'
|
||||
body_filter_by_lua_block {
|
||||
local file_exists = io.open("/data/nginx/skynet/prevstats.lua")
|
||||
if file_exists then
|
||||
file_exists.close()
|
||||
|
||||
-- because response data is chunked, we need to concat ngx.arg[1] until
|
||||
-- last chunk is received (when ngx.arg[2] is set to true)
|
||||
ngx.var.response_body = ngx.var.response_body .. ngx.arg[1]
|
||||
|
||||
if ngx.arg[2] then
|
||||
local json = require('cjson')
|
||||
local prevstats = require('/data/nginx/skynet/prevstats')
|
||||
local stats = json.decode(ngx.var.response_body)
|
||||
stats.uploadstats.numfiles = stats.uploadstats.numfiles + prevstats.numfiles
|
||||
stats.uploadstats.totalsize = stats.uploadstats.totalsize + prevstats.totalsize
|
||||
ngx.arg[1] = json.encode(stats)
|
||||
else
|
||||
-- do not send any data in this chunk (wait for last chunk)
|
||||
ngx.arg[1] = nil
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
proxy_cache skynet;
|
||||
proxy_cache_valid any 1m; # cache stats for 1 minute
|
||||
proxy_set_header User-Agent: Sia-Agent;
|
||||
|
@ -335,7 +308,11 @@ server {
|
|||
limit_conn upload_conn_rl 1;
|
||||
|
||||
client_max_body_size 1000M; # make sure to limit the size of upload to a sane value
|
||||
|
||||
# increase request timeouts
|
||||
proxy_read_timeout 600;
|
||||
proxy_send_timeout 600;
|
||||
|
||||
proxy_request_buffering off; # stream uploaded files through the proxy as it comes in
|
||||
proxy_set_header Expect $http_expect;
|
||||
proxy_set_header User-Agent: Sia-Agent;
|
||||
|
@ -362,7 +339,11 @@ server {
|
|||
include /etc/nginx/conf.d/include/cors;
|
||||
|
||||
client_max_body_size 50M; # tus chunks size is 40M + leaving 10M of breathing room
|
||||
|
||||
# increase request timeouts
|
||||
proxy_read_timeout 600;
|
||||
proxy_send_timeout 600;
|
||||
|
||||
proxy_request_buffering off; # stream uploaded files through the proxy as it comes in
|
||||
proxy_set_header Expect $http_expect;
|
||||
|
||||
|
@ -390,6 +371,13 @@ server {
|
|||
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})(/.*)?)$" {
|
||||
include /etc/nginx/conf.d/include/cors;
|
||||
include /etc/nginx/conf.d/include/proxy-buffer;
|
||||
|
@ -409,13 +397,25 @@ server {
|
|||
set $skylink $2;
|
||||
set $path $3;
|
||||
|
||||
# v2 support
|
||||
set $skylink_v1 $skylink;
|
||||
set $skylink_v2 $skylink;
|
||||
|
||||
access_by_lua_block {
|
||||
-- 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 isBase64v2 = string.len(ngx.var.skylink) == 46 and string.sub(ngx.var.skylink, 0, 2) == "AQ"
|
||||
|
||||
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_v2)
|
||||
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
|
||||
|
||||
-- this block runs only when accounts are enabled
|
||||
|
@ -432,7 +432,7 @@ server {
|
|||
proxy_read_timeout 600;
|
||||
proxy_set_header User-Agent: Sia-Agent;
|
||||
# proxy this call to siad /skynet/skylink/ endpoint (make sure the ip is correct)
|
||||
proxy_pass http://siad/skynet/skylink/$skylink$path$is_args$args;
|
||||
proxy_pass http://siad/skynet/skylink/$skylink_v1$path$is_args$args;
|
||||
}
|
||||
|
||||
location @base32_subdomain {
|
||||
|
|
|
@ -3,7 +3,7 @@ proxy_cache skynet; # cache name
|
|||
slice 1m;
|
||||
proxy_http_version 1.1; # upgrade if necessary because 1.0 does not support byte-range requests
|
||||
proxy_set_header Range $slice_range; # pass slice range to proxy
|
||||
proxy_cache_key $uri$arg_format$arg_attachment$slice_range; # use just the uri path, format and attachment args and slice range
|
||||
proxy_cache_key $skylink_v1$path$arg_format$arg_attachment$slice_range; # use just the uri path, format and attachment args and slice range
|
||||
proxy_cache_min_uses 3; # cache responses after 3 requests of the same file
|
||||
proxy_cache_valid 200 206 24h; # cache 200 and 206 responses for 24 hours
|
||||
proxy_cache_lock on; # queue cache requests for the same resource until it is fully cached
|
||||
|
|
Reference in New Issue