server { listen 80; listen [::]:80; server_name _; root /var/lib/arma-tiles; etag on; # Public API is x/y/z. try_files performs an internal lookup at z/x/y.png. location ~ ^/tiles/(?[0-9]+)/(?[0-9]+)/(?[0-9]+)$ { try_files /tiles/$tile_z/$tile_x/$tile_y.png =404; add_header Cache-Control "public, max-age=86400, stale-while-revalidate=604800" always; } # metadata.json and internal z/x/y.png paths are intentionally not public. location / { return 404; } }