adjust hns endpoint
This commit is contained in:
parent
b7578c00c9
commit
54cda20b32
|
@ -9,6 +9,7 @@ limit_conn_status 429;
|
||||||
# as the request address so we need to use real_ip_header module to use ip address from
|
# as the request address so we need to use real_ip_header module to use ip address from
|
||||||
# X-Forwarded-For header as a real ip address of the request
|
# X-Forwarded-For header as a real ip address of the request
|
||||||
set_real_ip_from 10.0.0.0/8;
|
set_real_ip_from 10.0.0.0/8;
|
||||||
|
set_real_ip_from 127.0.0.1/32;
|
||||||
set_real_ip_from 172.16.0.0/12;
|
set_real_ip_from 172.16.0.0/12;
|
||||||
set_real_ip_from 192.168.0.0/16;
|
set_real_ip_from 192.168.0.0/16;
|
||||||
real_ip_header X-Forwarded-For;
|
real_ip_header X-Forwarded-For;
|
||||||
|
@ -127,42 +128,36 @@ server {
|
||||||
}
|
}
|
||||||
|
|
||||||
location /hns {
|
location /hns {
|
||||||
include /etc/nginx/conf.d/include/cors;
|
|
||||||
include /etc/nginx/conf.d/include/proxy-buffer;
|
include /etc/nginx/conf.d/include/proxy-buffer;
|
||||||
include /etc/nginx/conf.d/include/proxy-cache-downloads;
|
|
||||||
|
|
||||||
limit_conn downloads_by_ip 100; # ddos protection: max 100 downloads at a time
|
|
||||||
add_header Cache-Control "public, max-age=300"; # allow consumer to cache response just for 5 minutes
|
|
||||||
|
|
||||||
set $skylink '';
|
set $skylink '';
|
||||||
set $skylink_path '';
|
set $rest '';
|
||||||
access_by_lua_block {
|
access_by_lua_block {
|
||||||
local json = require('cjson')
|
local json = require('cjson')
|
||||||
local hns_domain_name, request_uri_path = string.match(ngx.var.request_uri, "/hns/([^/]+)(.*)")
|
local hns_domain_name, request_uri_rest = string.match(ngx.var.request_uri, "/hns/([^/?]+)(.*)")
|
||||||
local hnsres_res = ngx.location.capture("/hnsres/" .. hns_domain_name)
|
local hnsres_res = ngx.location.capture("/hnsres/" .. hns_domain_name)
|
||||||
local hnsres_json = json.decode(hnsres_res.body)
|
local hnsres_json = json.decode(hnsres_res.body)
|
||||||
local skylink_prefix, skylink, skylink_path = string.match(hnsres_json.skylink, "(sia://)([^/]+)(.*)")
|
local skylink_prefix, skylink, skylink_rest = string.match(hnsres_json.skylink, "(sia://)([^/?]+)(.*)")
|
||||||
|
|
||||||
ngx.var.skylink = skylink
|
ngx.var.skylink = skylink
|
||||||
if request_uri_path == "" or (request_uri_path == "/" and skylink_path ~= "") then
|
if request_uri_rest == "" or (request_uri_rest == "/" and skylink_rest ~= "") then
|
||||||
ngx.var.skylink_path = skylink_path
|
ngx.var.rest = skylink_rest
|
||||||
else
|
else
|
||||||
ngx.var.skylink_path = request_uri_path
|
ngx.var.rest = request_uri_rest
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
proxy_read_timeout 600;
|
# overwrite the Cache-Control header to only cache for 60s in case the domain gets updated
|
||||||
proxy_set_header User-Agent: Sia-Agent;
|
more_set_headers 'Cache-Control: public, max-age=60';
|
||||||
|
|
||||||
proxy_pass http://siad/skynet/skylink/$skylink$skylink_path;
|
proxy_pass http://127.0.0.1/$skylink$rest;
|
||||||
|
|
||||||
header_filter_by_lua_block {
|
header_filter_by_lua_block {
|
||||||
if ngx.header.Location then
|
if ngx.header.location then
|
||||||
local json = require('cjson')
|
local hns_domain_name = string.match(ngx.var.request_uri, "/hns/([^/?]+)")
|
||||||
local hns_domain_name = string.match(ngx.var.request_uri, "/hns/(.+)/?")
|
local location = string.gsub(ngx.header.location, ngx.var.skylink, hns_domain_name)
|
||||||
local location = string.gsub(ngx.header.Location, ngx.var.skylink, hns_domain_name)
|
|
||||||
|
|
||||||
ngx.header.Location = location
|
ngx.header.location = location
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue