diff --git a/entrypoint.sh b/entrypoint.sh index 4c7de01..69e1828 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -115,6 +115,7 @@ echo -n "" >/etc/nginx/nginx.manifest.caching.config.conf # First tier caching of manifests; configure via MANIFEST_CACHE_PRIMARY_REGEX and MANIFEST_CACHE_PRIMARY_TIME location ~ ^/v2/(.*)/manifests/${MANIFEST_CACHE_PRIMARY_REGEX} { set \$docker_proxy_request_type "manifest-primary"; + set \$cache_key \$uri; proxy_cache_valid ${MANIFEST_CACHE_PRIMARY_TIME}; include "/etc/nginx/nginx.manifest.stale.conf"; } @@ -124,6 +125,7 @@ EOD # Secondary tier caching of manifests; configure via MANIFEST_CACHE_SECONDARY_REGEX and MANIFEST_CACHE_SECONDARY_TIME location ~ ^/v2/(.*)/manifests/${MANIFEST_CACHE_SECONDARY_REGEX} { set \$docker_proxy_request_type "manifest-secondary"; + set \$cache_key \$uri; proxy_cache_valid ${MANIFEST_CACHE_SECONDARY_TIME}; include "/etc/nginx/nginx.manifest.stale.conf"; } @@ -133,6 +135,7 @@ EOD # Default tier caching for manifests. Caches for ${MANIFEST_CACHE_DEFAULT_TIME} (from MANIFEST_CACHE_DEFAULT_TIME) location ~ ^/v2/(.*)/manifests/ { set \$docker_proxy_request_type "manifest-default"; + set \$cache_key \$uri; proxy_cache_valid ${MANIFEST_CACHE_DEFAULT_TIME}; include "/etc/nginx/nginx.manifest.stale.conf"; } @@ -142,6 +145,7 @@ EOD # Manifest caching is disabled. Enable it with ENABLE_MANIFEST_CACHE=true location ~ ^/v2/(.*)/manifests/ { set \$docker_proxy_request_type "manifest-default-disabled"; + set \$cache_key \$uri; proxy_cache_valid 0s; include "/etc/nginx/nginx.manifest.stale.conf"; } diff --git a/nginx.conf b/nginx.conf index 7b95bea..abcc3fd 100644 --- a/nginx.conf +++ b/nginx.conf @@ -266,6 +266,7 @@ echo "Docker configured with HTTPS_PROXY=$scheme://$http_host/" # For blob requests by digest, do cache, and treat redirects. location ~ ^/v2/(.*)/blobs/sha256:(.*) { set $docker_proxy_request_type "blob-by-digest"; + set $cache_key $2; include "/etc/nginx/nginx.manifest.common.conf"; } @@ -273,6 +274,7 @@ echo "Docker configured with HTTPS_PROXY=$scheme://$http_host/" # These are some of the requests that DockerHub will throttle. location ~ ^/v2/(.*)/manifests/sha256:(.*) { set $docker_proxy_request_type "manifest-by-digest"; + set $cache_key $uri; include "/etc/nginx/nginx.manifest.common.conf"; } @@ -285,6 +287,7 @@ echo "Docker configured with HTTPS_PROXY=$scheme://$http_host/" # Since these are mutable, we invalidate them immediately and keep them only in case the backend is down location ~ ^/v2/(.*)/blobs/ { set $docker_proxy_request_type "blob-mutable"; + set $cache_key $uri; proxy_cache_valid 0s; include "/etc/nginx/nginx.manifest.stale.conf"; } diff --git a/nginx.manifest.common.conf b/nginx.manifest.common.conf index 69d809c..41d985b 100644 --- a/nginx.manifest.common.conf +++ b/nginx.manifest.common.conf @@ -3,6 +3,6 @@ add_header X-Docker-Registry-Proxy-Cache-Type "$docker_proxy_request_type"; proxy_pass https://$targetHost; proxy_cache cache; - proxy_cache_key $uri; + proxy_cache_key $cache_key; proxy_intercept_errors on; error_page 301 302 307 = @handle_redirects;