我们有 ASP.NET Core 6.0 Web api 项目。我想配置 kestrel 限制,导致大传输时连接超时或业务逻辑中等待。
有我的 Program.cs 配置。但它不起作用。连接将在一分钟后关闭。
我们使用 alphine linux 在 kubernetes 中运行这个后端。 nginx 没有设置。我认为它集成在 .net core 包 idk 中。
builder.WebHost.ConfigureKestrel(options =>
{
options.Limits.MaxConcurrentConnections = 5000;
options.Limits.MaxConcurrentUpgradedConnections = 5000;
options.Limits.MaxRequestBodySize = int.MaxValue;
options.Limits.MaxRequestBufferSize = int.MaxValue;
options.Limits.KeepAliveTimeout = TimeSpan.FromHours(10);
options.Limits.RequestHeadersTimeout = TimeSpan.FromHours(10);
});
有一些UI日志可供测试:
413 -> 请求正文大小仅为 5MB 顺便说一句。
503 -> 1 分钟后连接超时。
感谢您的回答。
我明白了。
您应该将此行添加到注释下的 kubernetes.yml Ingress 部分。
apiVersion: ***
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/proxy-body-size: 50m
nginx.ingress.kubernetes.io/proxy-connect-timeout: '1200'
nginx.ingress.kubernetes.io/proxy-read-timeout: '1200'
nginx.ingress.kubernetes.io/proxy-send-timeout: '1200'
这会增加在 kubernetes 中运行的 api 的请求/响应主体的大小以及连接超时。我设置了50MB和20分钟,你可以随意编辑。