Kestrel在提供流量时抛出“无效的主机头”错误

Tom*_*ron 5 kestrel-http-server asp.net-core

我们最近已经将ASP.NET MVC 5应用程序迁移到ASP.NET Core 2.2。

一切似乎都正常,但是我们定期收到以下异常(大约每秒3次,稍后会更多):

BadHttpRequestException: Invalid Host header: '~^appname.*$'
  Module "Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException", line 0, col 0, in Throw
    Void Throw(Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.RequestRejectionReason, System.String)
  Module "Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Http1Connection", line 95, col 0, in EnsureHostHeaderExists
    Void EnsureHostHeaderExists()
  Module "Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Http1Connection", line 196, col 0, in TryParseRequest
    Boolean TryParseRequest(System.IO.Pipelines.ReadResult, Boolean ByRef)
  Module "Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol+<ProcessRequests>d__185`1", line 170, col 0, in MoveNext
    Void MoveNext()
  Module "System.Runtime.ExceptionServices.ExceptionDispatchInfo", line 12, col 0, in Throw
    Void Throw()
  Module "System.Runtime.CompilerServices.TaskAwaiter", line 46, col 0, in HandleNonSuccessAndDebuggerNotification
    Void HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
  Module "Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol+<ProcessRequestsAsync>d__184`1", line 135, col 0, in MoveNext
    Void MoveNext()
Run Code Online (Sandbox Code Playgroud)

通过与我们的运维团队成员协商,很明显,我们有三个HAProxy实例,它们每个大约每秒检查一次应用程序的每个节点。

对此应用程序的每个请求将按以下方式进行:

HAProxy-> Nginx-> Kestrel / ASP.NET Core应用程序

我的问题是,我如何确定这里发生了什么?

Tom*_*ron 3

当前版本的 Kestrel(我们使用的是 ASP.NET Core 2.2)不支持 HTTP 访问日志记录。

请参阅此问题:支持使用通用日志格式/扩展日志格式的访问日志记录

为了追踪问题,我必须让我们的运营团队检查我们的 nginx 日志(nginx 是我们正在使用的反向代理),以确定带有无效主机标头的请求来自何处。

事实证明,问题是状态检查应用程序配置错误。