【问题标题】:Service Fabric - Remove ReverseProxy Server header 'Microsoft-HTTPAPI/2.0'Service Fabric - 删除 ReverseProxy Server 标头“Microsoft-HTTPAPI/2.0”
【发布时间】:2019-03-14 07:01:28
【问题描述】:

我有一个在 asp.net core 2.1/kestrel 上运行的无状态服务。该服务是通过 LB 和 SF Reverse Proxy 从外部保护和访问的。 Service Fabric 版本为 6.3.187.9494。

我需要从响应中完全删除服务器标头,通过操作 KestrelServerOptions.AddServerHeader 在服务本身中执行此操作没有问题,但似乎 ReverseProxy 添加了自己的服务标头,即 Microsoft -HTTPAPI/2.0.

这就是我检查的方式 - 我从它运行的节点向服务的端点发出请求,但我没有得到服务器标头。然后我做同样的事情,但通过反向代理,我回来了 - 服务器:Microsoft-HTTPAPI/2.0。

通过ApplicationGateway/Http 设置阅读,我发现了一个名为RemoveServiceResponseHeaders的属性 -

以分号/逗号分隔的响应标头列表 从服务响应中删除;在转发给客户之前。 如果设置为空字符串;传递由返回的所有标头 按原样服务。即不要覆盖日期和服务器

我已将那个设置为“日期;服务器”并更新了集群,但没有运气,因为我仍然得到那个服务器标头。

有什么建议吗?

【问题讨论】:

  • 你可以尝试将其设置为空字符串吗?
  • @OlegKarasik 你的意思是 RemoveServiceResponseHeaders 属性?
  • 是的。 (输入更多字符以达到 15 个限制)。
  • @OlegKarasik 一样

标签: azure azure-service-fabric asp.net-core-2.1 http.sys


【解决方案1】:

恐怕您无法在 ServiceFabric 中使用传统的“RemoveServiceResponseHeaders”配置。它只会删除从您的服务响应中收到的读者。

在 windows 上,Service Fabric HttpGateway 运行在 HTTP.sys 内核模块之上,该内核模块负责这个 header,SF 对此没有发言权。 p>

在我走得更远之前,

如果你出于安全原因删除它,你应该重新考虑使用 SF 提供的内置 ApplicationGateway,它会暴露你所有的服务,目前无法控制通过它暴露哪些服务,我认为风险是高于仅删除服务器标头,因为它不会公开真实的服务器名称。

走得更远,

要解决您的问题,您有两种选择:

  1. 您可以使用 HTTP.sys 注册表settings 在机器上将其删除。

您需要在注册表项HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters 中添加DisableServerHeader DWORD 值并将其值设置为2

此键控制 http.sys 在附加 http 响应标头“服务器”,用于发送给客户端的响应。 值为0,即默认值,将使用标头值 应用程序提供给 http.sys,或将附加默认值 将“Microsoft-HTTPAPI/2.0”添加到响应标头。值为 1 将 不为 http.sys 生成的响应附加“服务器”标头 (以 400、503 和其他状态码结尾的响应)。值为 2 将阻止 http.sys 将“服务器”标头附加到 回复。如果响应中存在“服务器”标头,则不会 删除,如果不存在,则不会添加。

请查看此答案并详细了解如何操作:GET request to IIS returns Microsoft-HttpApi/2.0

.

  1. 根据上面的描述,响应头包含'Microsoft-HTTPAPI/2.0',因为默认值为0,原始响应不包含服务器头,如果你提供任何值,它将被使用。此外,将 SF 配置为不从响应中删除服务器标头,将 RemoveServiceResponseHeaders 配置设置为仅类似于“日期”,因为默认值为“日期;服务器”

【讨论】:

  • 谢谢!我还假设 RemoveServiceResponseHeaders 仅删除了我的服务的标头,但我希望 Microsoft 的某些东西能够发挥作用。我将使用注册表项并让您知道它是否有帮助。附言通过 RP 打开的规模集只有一项服务,不允许未经身份验证/未经授权的访问。
  • 顺便说一下,我想知道是否有办法以某种方式自动修复...我的意思是,唯一对我有用的方法是我必须在更改节点后重新启动节点注册表项,因为简单地重新启动 http 服务是行不通的(“sc stop”/“net stop http”命令卡住了)。有什么想法吗?
  • 是的,虽然我考虑过 Desired State Configuration,但问题是它什么时候应用?如果http.sys先起来,我无论如何都要重启机器......
  • 这里也一样:操作注册表项就可以了,我什至设法使用 ARM 模板中的 CustomScriptExtension 自动设置注册表项。但是我仍然需要手动重新启动 VM 规模集,因为注册表项“太晚”应用,即在 http.sys 已经运行并且“net stop http”卡住之后......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
  • 2018-10-30
  • 2018-07-24
  • 2016-08-29
  • 2016-05-18
  • 2017-08-09
  • 2017-12-27
相关资源
最近更新 更多