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;
}