Explorar o código

Merge pull request #1811 from joshuaboniface/fix-listen

Configure Kestrel listener to use configured IPs
Joshua M. Boniface %!s(int64=5) %!d(string=hai) anos
pai
achega
749023bf02
Modificáronse 1 ficheiros con 35 adicións e 4 borrados
  1. 35 4
      Emby.Server.Implementations/ApplicationHost.cs

+ 35 - 4
Emby.Server.Implementations/ApplicationHost.cs

@@ -615,11 +615,34 @@ namespace Emby.Server.Implementations
             var host = new WebHostBuilder()
                 .UseKestrel(options =>
                 {
-                    options.ListenAnyIP(HttpPort);
+                    var addresses = ServerConfigurationManager
+                        .Configuration
+                        .LocalNetworkAddresses
+                        .Select(NormalizeConfiguredLocalAddress)
+                        .Where(i => i != null)
+                        .ToList();
+                    if (addresses.Any())
+                    {
+                        foreach (var address in addresses)
+                        {
+                            Logger.LogInformation("Kestrel listening on {ipaddr}", address);
+                            options.Listen(address, HttpPort);
 
-                    if (EnableHttps && Certificate != null)
+                            if (EnableHttps && Certificate != null)
+                            {
+                                options.Listen(address, HttpsPort, listenOptions => listenOptions.UseHttps(Certificate));
+                            }
+                        }
+                    }
+                    else
                     {
-                        options.ListenAnyIP(HttpsPort, listenOptions => listenOptions.UseHttps(Certificate));
+                        Logger.LogInformation("Kestrel listening on all interfaces");
+                        options.ListenAnyIP(HttpPort);
+
+                        if (EnableHttps && Certificate != null)
+                        {
+                            options.ListenAnyIP(HttpsPort, listenOptions => listenOptions.UseHttps(Certificate));
+                        }
                     }
                 })
                 .UseContentRoot(contentRoot)
@@ -640,7 +663,15 @@ namespace Emby.Server.Implementations
                 })
                 .Build();
 
-            await host.StartAsync().ConfigureAwait(false);
+            try
+            {
+                await host.StartAsync().ConfigureAwait(false);
+            }
+            catch (Exception ex)
+            {
+                Logger.LogError("Kestrel failed to start! This is most likely due to an invalid address or port bind - correct your bind configuration in system.xml and try again.");
+                throw;
+            }
         }
 
         private async Task ExecuteWebsocketHandlerAsync(HttpContext context, Func<Task> next)