cache only registry calls from hns endpoint

This commit is contained in:
Karol Wypchlo 2021-01-28 15:02:51 +01:00
parent 1177b7cf94
commit 1a691038b7
2 changed files with 19 additions and 9 deletions

View File

@ -192,7 +192,7 @@ server {
local datakey = hnsres_json.registry.datakey local datakey = hnsres_json.registry.datakey
-- make a get request to /skynet/registry endpoint with the credentials from text record -- make a get request to /skynet/registry endpoint with the credentials from text record
local registry_res = ngx.location.capture("/skynet/registry?publickey=" .. publickey .. "&datakey=" .. datakey) local registry_res = ngx.location.capture("/skynet/registry/cached?publickey=" .. publickey .. "&datakey=" .. datakey)
-- we want to fail with a generic 404 when /skynet/registry returns anything but 200 OK -- we want to fail with a generic 404 when /skynet/registry returns anything but 200 OK
if registry_res.status ~= ngx.HTTP_OK then if registry_res.status ~= ngx.HTTP_OK then
@ -250,10 +250,27 @@ server {
proxy_pass http://handshake-api:3100; proxy_pass http://handshake-api:3100;
} }
# internal registry endpoint that caches calls for a certain period of time
# it is not suitable for every registry call but some requests might be cached
# and we are using it currently for caching registry resolutions from /hns calls
location /skynet/registry/cached {
internal; # internal endpoint only
access_log off; # do not log traffic
proxy_cache skynet;
proxy_http_version 1.1; # upgrade if necessary
proxy_cache_key publickey=$arg_publickey&datakey=$arg_datakey; # cache based on publickey and datakey
proxy_cache_valid 200 30s; # cache only 200 responses and only for 30 seconds
proxy_cache_lock on; # queue cache requests for the same resource until it is fully cached
proxy_cache_bypass $cookie_nocache $arg_nocache; # add cache bypass option
add_header X-Proxy-Cache $upstream_cache_status; # add response header to indicate cache hits and misses
http://127.0.0.1/skynet/registry$is_args$args;
}
location /skynet/registry { location /skynet/registry {
include /etc/nginx/conf.d/include/cors; include /etc/nginx/conf.d/include/cors;
include /etc/nginx/conf.d/include/sia-auth; include /etc/nginx/conf.d/include/sia-auth;
include /etc/nginx/conf.d/include/proxy-cache-registry;
limit_req zone=registry_access_by_ip burst=600 nodelay; limit_req zone=registry_access_by_ip burst=600 nodelay;
limit_req zone=registry_access_by_ip_throttled burst=200 nodelay; limit_req zone=registry_access_by_ip_throttled burst=200 nodelay;

View File

@ -1,7 +0,0 @@
proxy_cache skynet;
proxy_http_version 1.1; # upgrade if necessary
proxy_cache_key publickey=$arg_publickey&datakey=$arg_datakey; # cache based on publickey and datakey
proxy_cache_valid 200 30s; # cache only 200 responses and only for 30 seconds
proxy_cache_lock on; # queue cache requests for the same resource until it is fully cached
proxy_cache_bypass $cookie_nocache $arg_nocache; # add cache bypass option
add_header X-Proxy-Cache $upstream_cache_status; # add response header to indicate cache hits and misses