diff --git a/modules/server/containers/apps/favicon.nix b/modules/server/containers/apps/favicon.nix index b6ef305..847aa99 100644 --- a/modules/server/containers/apps/favicon.nix +++ b/modules/server/containers/apps/favicon.nix @@ -4,9 +4,15 @@ let mediaCfg = config.syscfg.media; port = 8080; cacheControl = containerCfg.extra.cacheControl or "public, max-age=86400"; - priority = toString (containerCfg.extra.priority or 1000); + priority = toString (containerCfg.extra.priority or 2147482647); logoSvgFileName = builtins.baseNameOf (toString mediaCfg.logo.svg); logoSvgMount = "/assets/${logoSvgFileName}"; + traefikAssetPathRegexp = + "^/(.*/)?" + + "(favicon(-[0-9]+x[0-9]+)?\\.(ico|png|svg)" + + "|apple-touch-icon(-precomposed)?\\.png" + + "|android-chrome-[0-9]+x[0-9]+\\.png" + + "|mstile-[0-9]+x[0-9]+\\.png)$"; configFile = pkgs.writeText "favicon-config.json" (builtins.toJSON { inherit cacheControl; mappings = containerCfg.extra.mappings or {}; @@ -42,8 +48,8 @@ let r"(?i)(?:^|/)(?:" r"favicon(?:-[0-9]+x[0-9]+)?\.(?:ico|png|svg)" r"|apple-touch-icon(?:-precomposed)?\.png" - r"|android-chrome-(?:192x192|512x512)\.png" - r"|mstile-150x150\.png" + r"|android-chrome-[0-9]{2,4}x[0-9]{2,4}\.png" + r"|mstile-[0-9]{2,4}x[0-9]{2,4}\.png" r")$" ) @@ -283,7 +289,7 @@ in { extraLabels = { "traefik.enable" = "true"; "traefik.http.routers.${name}.entrypoints" = "web-secure"; - "traefik.http.routers.${name}.rule" = "HostRegexp(`{host:.+}`) && PathRegexp(`^/(?:.*\\/)?(?:favicon(?:-[0-9]+x[0-9]+)?\\.(?:ico|png|svg)|apple-touch-icon(?:-precomposed)?\\.png|android-chrome-(?:192x192|512x512)\\.png|mstile-150x150\\.png)$`)"; + "traefik.http.routers.${name}.rule" = "PathRegexp(`${traefikAssetPathRegexp}`)"; "traefik.http.routers.${name}.priority" = priority; "traefik.http.routers.${name}.tls" = "true"; "traefik.http.services.${name}.loadbalancer.server.port" = toString port;