Fix duplicate CORS headers for tile fallbacks
This commit is contained in:
+9
-10
@@ -6,20 +6,19 @@ server {
|
|||||||
root /var/lib/arma-tiles;
|
root /var/lib/arma-tiles;
|
||||||
etag on;
|
etag on;
|
||||||
|
|
||||||
# Public API is x/y/z. try_files performs an internal lookup at z/x/y.png.
|
# Keep these at server level. Named fallback locations inherit them, so each
|
||||||
location ~ ^/tiles/(?<tile_x>[0-9]+)/(?<tile_y>[0-9]+)/(?<tile_z>[0-9]+)$ {
|
# response has exactly one CORS value instead of the invalid "*, *".
|
||||||
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;
|
|
||||||
}
|
|
||||||
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 Cache-Control "public, max-age=86400, stale-while-revalidate=604800" always;
|
||||||
add_header Access-Control-Allow-Origin "*" always;
|
add_header Access-Control-Allow-Origin "*" always;
|
||||||
add_header Access-Control-Allow-Methods "GET, HEAD, OPTIONS" always;
|
add_header Access-Control-Allow-Methods "GET, HEAD, OPTIONS" always;
|
||||||
add_header Access-Control-Allow-Headers "Origin, Range, Accept" 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.
|
||||||
|
location ~ ^/tiles/(?<tile_x>[0-9]+)/(?<tile_y>[0-9]+)/(?<tile_z>[0-9]+)$ {
|
||||||
|
if ($request_method = OPTIONS) {
|
||||||
|
return 204;
|
||||||
|
}
|
||||||
|
try_files /tiles/$tile_z/$tile_x/$tile_y.png @callback_provider_tile;
|
||||||
}
|
}
|
||||||
|
|
||||||
# A callback-provider base layer fills transparent edges when configured.
|
# A callback-provider base layer fills transparent edges when configured.
|
||||||
|
|||||||
@@ -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")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user