Fix duplicate CORS headers for tile fallbacks

This commit is contained in:
2026-07-25 01:31:58 -03:00
parent fa3fa18342
commit dd987de699
2 changed files with 14 additions and 18 deletions
+7 -8
View File
@@ -6,20 +6,19 @@ server {
root /var/lib/arma-tiles; root /var/lib/arma-tiles;
etag on; etag on;
# Keep these at server level. Named fallback locations inherit them, so each
# response has exactly one CORS value instead of the invalid "*, *".
add_header Cache-Control "public, max-age=86400, stale-while-revalidate=604800" always;
add_header Access-Control-Allow-Origin "*" always;
add_header Access-Control-Allow-Methods "GET, HEAD, OPTIONS" always;
add_header Access-Control-Allow-Headers "Origin, Range, Accept" always;
# Public API is x/y/z. try_files performs an internal lookup at z/x/y.png. # Public API is x/y/z. try_files performs an internal lookup at z/x/y.png.
location ~ ^/tiles/(?<tile_x>[0-9]+)/(?<tile_y>[0-9]+)/(?<tile_z>[0-9]+)$ { location ~ ^/tiles/(?<tile_x>[0-9]+)/(?<tile_y>[0-9]+)/(?<tile_z>[0-9]+)$ {
if ($request_method = OPTIONS) { if ($request_method = OPTIONS) {
add_header Access-Control-Allow-Origin "*" always;
add_header Access-Control-Allow-Methods "GET, HEAD, OPTIONS" always;
add_header Access-Control-Allow-Headers "Origin, Range, Accept" always;
add_header Content-Length 0;
return 204; return 204;
} }
try_files /tiles/$tile_z/$tile_x/$tile_y.png @callback_provider_tile; try_files /tiles/$tile_z/$tile_x/$tile_y.png @callback_provider_tile;
add_header Cache-Control "public, max-age=86400, stale-while-revalidate=604800" always;
add_header Access-Control-Allow-Origin "*" always;
add_header Access-Control-Allow-Methods "GET, HEAD, OPTIONS" always;
add_header Access-Control-Allow-Headers "Origin, Range, Accept" always;
} }
# A callback-provider base layer fills transparent edges when configured. # A callback-provider base layer fills transparent edges when configured.
+7 -10
View File
@@ -59,15 +59,10 @@ def validate_callback_provider(value: str | None) -> CallbackProvider | None:
return CallbackProvider(origin=f"https://{parsed.netloc}", path_template=parsed.path) return CallbackProvider(origin=f"https://{parsed.netloc}", path_template=parsed.path)
def render_location(name: str, provider: CallbackProvider | None, x: str, y: str, z: str, label: str) -> str: def render_location(name: str, provider: CallbackProvider | None, x: str, y: str, z: str) -> str:
headers = """ add_header Cache-Control \"public, max-age=86400, stale-while-revalidate=604800\" always;
add_header Access-Control-Allow-Origin \"*\" always;
add_header Access-Control-Allow-Methods \"GET, HEAD, OPTIONS\" always;
add_header Access-Control-Allow-Headers \"Origin, Range, Accept\" always;"""
if provider is None: if provider is None:
return f"""location @{name} {{ return f"""location @{name} {{
try_files /tiles/empty.png =500; try_files /tiles/empty.png =500;
{headers}
}} }}
""" """
rendered_path = provider.path_template.replace("{x}", f"${x}").replace("{y}", f"${y}").replace("{z}", f"${z}") rendered_path = provider.path_template.replace("{x}", f"${x}").replace("{y}", f"${y}").replace("{z}", f"${z}")
@@ -79,8 +74,10 @@ def render_location(name: str, provider: CallbackProvider | None, x: str, y: str
proxy_cache callback_provider; proxy_cache callback_provider;
proxy_cache_valid 200 7d; proxy_cache_valid 200 7d;
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504; proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
add_header X-Map-Source \"Callback provider {label}\" always; proxy_hide_header Cache-Control;
{headers} proxy_hide_header Access-Control-Allow-Origin;
proxy_hide_header Access-Control-Allow-Methods;
proxy_hide_header Access-Control-Allow-Headers;
}} }}
""" """
@@ -88,9 +85,9 @@ def render_location(name: str, provider: CallbackProvider | None, x: str, y: str
def render_nginx(provider: CallbackProvider | None) -> str: def render_nginx(provider: CallbackProvider | None) -> str:
return ( return (
"# Generated at container startup. Do not edit.\n" "# Generated at container startup. Do not edit.\n"
+ render_location("callback_provider_tile", provider, "tile_x", "tile_y", "tile_z", "fallback") + render_location("callback_provider_tile", provider, "tile_x", "tile_y", "tile_z")
+ "\n" + "\n"
+ render_location("callback_provider_base", provider, "base_x", "base_y", "base_z", "base") + render_location("callback_provider_base", provider, "base_x", "base_y", "base_z")
) )