diff --git a/README.md b/README.md index b051b21848..ec8528c0a6 100644 --- a/README.md +++ b/README.md @@ -385,7 +385,7 @@ System administrators will most likely have their own configuration plans, but h Once complete, test that your configuration worked by visiting your proxy site from a browser on a different computer. You should recieve a 401 Unauthorized response. -_NOTE: For SignalR to function properly, make sure your reverse proxy setup supports SSE (Server-Sent Events)_ +_NOTE: Your reverse proxy setup may interfere with SSE (Server-Sent Events) which is used for real-time job updates. If you find this to be the case, please open an issue describing what you did to fix it as there may be a way for us to bypass the need for a workaround from our end._ #### IIS (Reccommended for Windows) diff --git a/build/Version.props b/build/Version.props index 3478f0fc6f..28f2e724a5 100644 --- a/build/Version.props +++ b/build/Version.props @@ -3,7 +3,7 @@ - 5.18.0 + 5.18.1 4.7.1 9.14.0 7.0.0 diff --git a/src/Tgstation.Server.Host/Components/Watchdog/AdvancedWatchdog.cs b/src/Tgstation.Server.Host/Components/Watchdog/AdvancedWatchdog.cs index 7878854458..00e9122479 100644 --- a/src/Tgstation.Server.Host/Components/Watchdog/AdvancedWatchdog.cs +++ b/src/Tgstation.Server.Host/Components/Watchdog/AdvancedWatchdog.cs @@ -222,7 +222,7 @@ namespace Tgstation.Server.Host.Components.Watchdog else Logger.LogTrace("Nothing to do as pendingSwappable is null."); - return MonitorAction.Continue; + return await base.HandleNormalReboot(cancellationToken); } /// diff --git a/src/Tgstation.Server.Host/Core/Application.cs b/src/Tgstation.Server.Host/Core/Application.cs index 41effa0094..3daa375299 100644 --- a/src/Tgstation.Server.Host/Core/Application.cs +++ b/src/Tgstation.Server.Host/Core/Application.cs @@ -463,6 +463,9 @@ namespace Tgstation.Server.Host.Core // Add the X-Powered-By response header applicationBuilder.UseServerBranding(assemblyInformationProvider); + // Add the X-Accel-Buffering response header + applicationBuilder.UseDisabledNginxProxyBuffering(); + // suppress OperationCancelledExceptions, they are just aborted HTTP requests applicationBuilder.UseCancelledRequestSuppression(); diff --git a/src/Tgstation.Server.Host/Extensions/ApplicationBuilderExtensions.cs b/src/Tgstation.Server.Host/Extensions/ApplicationBuilderExtensions.cs index 55086228dc..bc2a6dd3d7 100644 --- a/src/Tgstation.Server.Host/Extensions/ApplicationBuilderExtensions.cs +++ b/src/Tgstation.Server.Host/Extensions/ApplicationBuilderExtensions.cs @@ -158,10 +158,27 @@ namespace Tgstation.Server.Host.Extensions ArgumentNullException.ThrowIfNull(applicationBuilder); ArgumentNullException.ThrowIfNull(assemblyInformationProvider); - applicationBuilder.Use(async (context, next) => + applicationBuilder.Use((context, next) => { context.Response.Headers.Add("X-Powered-By", assemblyInformationProvider.VersionPrefix); - await next(); + return next(); + }); + } + + /// + /// Add the X-Accel-Buffering response header. + /// + /// The to configure. + /// This is used to avoid interruption to SignalR streams by Nginx. + public static void UseDisabledNginxProxyBuffering(this IApplicationBuilder applicationBuilder) + { + ArgumentNullException.ThrowIfNull(applicationBuilder); + + // https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/#x-accel-buffering + applicationBuilder.Use((context, next) => + { + context.Response.Headers.Add("X-Accel-Buffering", "no"); + return next(); }); } diff --git a/tests/Tgstation.Server.Tests/Live/HardFailLogger.cs b/tests/Tgstation.Server.Tests/Live/HardFailLogger.cs index eca7cf4ef5..af42b14564 100644 --- a/tests/Tgstation.Server.Tests/Live/HardFailLogger.cs +++ b/tests/Tgstation.Server.Tests/Live/HardFailLogger.cs @@ -30,7 +30,7 @@ namespace Tgstation.Server.Tests.Live && !(logMessage.StartsWith("An exception occurred in the database while saving changes for context type") && (exception is OperationCanceledException || exception?.InnerException is OperationCanceledException))) || (logLevel == LogLevel.Critical && logMessage != "DropDatabase configuration option set! Dropping any existing database...")) { - failureSink(new AssertFailedException("TGS logged an unexpected error!")); + failureSink(new AssertFailedException($"TGS ERR: {logMessage}")); } } } diff --git a/tools/Tgstation.Server.ReleaseNotes/Program.cs b/tools/Tgstation.Server.ReleaseNotes/Program.cs index 79b594e505..6aba269c2f 100644 --- a/tools/Tgstation.Server.ReleaseNotes/Program.cs +++ b/tools/Tgstation.Server.ReleaseNotes/Program.cs @@ -1322,6 +1322,12 @@ The user account that created this pull request is available to correct any issu PrintChanges(newNotes, relevantChangelog); } + if(component == Component.DreamMakerApi) + { + newNotes.AppendLine(); + newNotes.AppendLine("#tgs-dmapi-release"); + } + var markdown = newNotes.ToString(); return markdown; }