瀏覽代碼

Properly redirect healthcheck endpoint if using BaseUrl

crobibero 4 年之前
父節點
當前提交
b11718a01d
共有 1 個文件被更改,包括 20 次插入9 次删除
  1. 20 9
      Jellyfin.Server/Middleware/BaseUrlRedirectionMiddleware.cs

+ 20 - 9
Jellyfin.Server/Middleware/BaseUrlRedirectionMiddleware.cs

@@ -45,16 +45,27 @@ namespace Jellyfin.Server.Middleware
             var localPath = httpContext.Request.Path.ToString();
             var localPath = httpContext.Request.Path.ToString();
             var baseUrlPrefix = serverConfigurationManager.GetNetworkConfiguration().BaseUrl;
             var baseUrlPrefix = serverConfigurationManager.GetNetworkConfiguration().BaseUrl;
 
 
-            if (string.Equals(localPath, baseUrlPrefix + "/", StringComparison.OrdinalIgnoreCase)
-                || string.Equals(localPath, baseUrlPrefix, StringComparison.OrdinalIgnoreCase)
-                || string.Equals(localPath, "/", StringComparison.OrdinalIgnoreCase)
-                || string.IsNullOrEmpty(localPath)
-                || !localPath.StartsWith(baseUrlPrefix, StringComparison.OrdinalIgnoreCase))
+            if (!string.IsNullOrEmpty(baseUrlPrefix))
             {
             {
-                // Always redirect back to the default path if the base prefix is invalid or missing
-                _logger.LogDebug("Normalizing an URL at {LocalPath}", localPath);
-                httpContext.Response.Redirect(baseUrlPrefix + "/" + _configuration[ConfigurationExtensions.DefaultRedirectKey]);
-                return;
+                if (!localPath.StartsWith(baseUrlPrefix, StringComparison.OrdinalIgnoreCase)
+                    && localPath.EndsWith("/health", StringComparison.OrdinalIgnoreCase))
+                {
+                    _logger.LogDebug("Redirecting /health check");
+                    httpContext.Response.Redirect(baseUrlPrefix + "/health");
+                    return;
+                }
+
+                if (string.Equals(localPath, baseUrlPrefix + "/", StringComparison.OrdinalIgnoreCase)
+                    || string.Equals(localPath, baseUrlPrefix, StringComparison.OrdinalIgnoreCase)
+                    || string.Equals(localPath, "/", StringComparison.OrdinalIgnoreCase)
+                    || string.IsNullOrEmpty(localPath)
+                    || !localPath.StartsWith(baseUrlPrefix, StringComparison.OrdinalIgnoreCase))
+                {
+                    // Always redirect back to the default path if the base prefix is invalid or missing
+                    _logger.LogDebug("Normalizing an URL at {LocalPath}", localPath);
+                    httpContext.Response.Redirect(baseUrlPrefix + "/" + _configuration[ConfigurationExtensions.DefaultRedirectKey]);
+                    return;
+                }
             }
             }
 
 
             await _next(httpContext).ConfigureAwait(false);
             await _next(httpContext).ConfigureAwait(false);