服务结构-删除ReverseProxy Server标头'Microsoft-HTTPAPI / 2.0'

时间:2018-10-09 13:18:03

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

我在asp.net core 2.1 / kestrel上运行了一个无状态服务。该服务是安全的,可以通过LB和SF反向代理从外部进行访问。 Service Fabric版本为6.3.187.9494。

我需要从响应中完全删除Server标头,并且通过操作KestrelServerOptions.AddServerHeader在服务本身中做到这一点没有问题,但似乎 ReverseProxy会添加其自己的Service标头,即Microsoft -HTTPAPI / 2.0

这就是我要检查的方式-我从运行该节点的节点向服务端点发出请求,但没有任何服务器标头。然后,我通过反向代理执行相同的操作,然后返回-服务器:Microsoft-HTTPAPI / 2.0。

通读ApplicationGateway/Http 设置,我发现名为 RemoveServiceResponseHeaders -

的属性
  

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

我已将其设置为“ Date; Server”,并更新了群集,但是没有运气,因为我仍然获得该Server标头。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

恐怕您无法使用ServiceFabric中的常规“ RemoveServiceResponseHeaders”配置来做到这一点。只会从您的服务响应中删除收到的读者。

在Windows上,服务结构HttpGateway运行在负责此标头的 HTTP.sys 内核模块之上,SF在此没有发言权。

  

在我进一步介绍之前,

     

如果出于安全原因要删除此文件,则应重新考虑使用SF提供的内置ApplicationGateway,它将公开您的所有服务,并且目前无法控制通过它公开的服务,我认为这是有风险的高于仅删除服务器标头,因为它不公开真实的服务器名称。

走得更远

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

  1. 您可以使用 HTTP.sys 注册表settings来将其从计算机上删除。

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

enter image description here

  

此键控制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,并且原始响应不包含Server标头,如果您提供任何值,则将使用它。另外,将SF配置为不从响应中删除Server标头,而是将RemoveServiceResponseHeaders配置仅设置为“ Date”,因为默认值为“ Date; Server”