From 54cda20b3210bffd536f8bee72d990d978227ca0 Mon Sep 17 00:00:00 2001 From: Karol Wypchlo Date: Wed, 16 Sep 2020 14:21:22 +0200 Subject: [PATCH] adjust hns endpoint --- docker/nginx/conf.d/client.conf | 35 ++++++++++++++------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/docker/nginx/conf.d/client.conf b/docker/nginx/conf.d/client.conf index 195abb7d..6c9ce836 100644 --- a/docker/nginx/conf.d/client.conf +++ b/docker/nginx/conf.d/client.conf @@ -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 # 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 127.0.0.1/32; set_real_ip_from 172.16.0.0/12; set_real_ip_from 192.168.0.0/16; real_ip_header X-Forwarded-For; @@ -127,42 +128,36 @@ server { } location /hns { - include /etc/nginx/conf.d/include/cors; 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_path ''; + set $rest ''; access_by_lua_block { 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_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 - if request_uri_path == "" or (request_uri_path == "/" and skylink_path ~= "") then - ngx.var.skylink_path = skylink_path + if request_uri_rest == "" or (request_uri_rest == "/" and skylink_rest ~= "") then + ngx.var.rest = skylink_rest else - ngx.var.skylink_path = request_uri_path + ngx.var.rest = request_uri_rest end } - proxy_read_timeout 600; - proxy_set_header User-Agent: Sia-Agent; - - proxy_pass http://siad/skynet/skylink/$skylink$skylink_path; + # overwrite the Cache-Control header to only cache for 60s in case the domain gets updated + more_set_headers 'Cache-Control: public, max-age=60'; + + proxy_pass http://127.0.0.1/$skylink$rest; header_filter_by_lua_block { - if ngx.header.Location then - local json = require('cjson') - local hns_domain_name = string.match(ngx.var.request_uri, "/hns/(.+)/?") - local location = string.gsub(ngx.header.Location, ngx.var.skylink, hns_domain_name) + if ngx.header.location then + local hns_domain_name = string.match(ngx.var.request_uri, "/hns/([^/?]+)") + local location = string.gsub(ngx.header.location, ngx.var.skylink, hns_domain_name) - ngx.header.Location = location + ngx.header.location = location end } }