HTTP 符号存储

通过使用 symsrv.dll(随调试器一起提供)支持的 SRV 协议,可以使用 HTTP(而不只是 UNC/SMB)来访问符号存储。

当防火墙不允许客户端和服务器之间使用 SMB 时,通常使用 HTTP 来代替 SMB。 生产环境和实验室环境就是一个很好的例子。

由于其只读性质,HTTP 符号服务器不能成为符号路径链中的下游存储。 符号服务器代理(ISAPI 筛选器)可绕过这一限制。 SymProxy 会使用预先配置的上游符号存储将丢失的文件下载到服务器的文件系统中。 筛选器会将文件下载到文件系统,允许 IIS 将文件下载到客户端,从而恢复符号存储链的概念。 有关详细信息,请参阅 SymProxy

将 IIS 配置为符号存储相对简单,因为符号文件只是用作静态文件。 唯一的非默认设置是 MIME 类型的配置,以允许以二进制流的形式下载符号文件。 这可以通过在符号文件夹的虚拟目录中使用“*”通配符来实现。

要通过 Internet 访问符号存储,必须配置包含符号文件和 Internet Information Services (IIS) 的目录。

注意由于 IIS 配置为提供符号文件的方式,因此不建议将同一服务器实例用于任何其他目的。 通常情况下,符号服务器所需的安全设置对于其他用途(例如面向外部的商务服务器)并无意义。 请确保此处所述的示例配置对环境具有意义,并根据具体需要进行适当调整。

创建符号目录

首先选择要用作符号存储的目录。 在示例中,我们将此目录称为 c:\symstore,网络服务器的名称为 \SymMachineName。

有关如何填充符号存储的详细信息,请参阅 SymStore符号存储文件夹树

配置 IIS

必须配置 Internet Information Services (IIS),通过创建虚拟目录和配置 MIME 类型为符号提供服务。 完成上述操作后,即可选择身份验证方法。

创建虚拟目录

  1. 打开“Internet Information Services (IIS)管理器” 。

  2. 导航到网站

  3. 右键单击默认网站或正在使用的网站名称,然后选择添加虚拟目录...

  4. 别名键入符号,然后单击下一步

    为便于管理,建议文件夹、共享和虚拟目录都使用相同的名称。

  5. 路径中输入 c:\SymStore,然后单击下一步

  6. 单击“确定”完成添加虚拟目录。

为服务器执行一次子目录配置过程。 请注意,这是一个全局设置,会影响未托管在网站根文件夹中的应用程序。

子目录配置

  1. 导航到[计算机]

  2. 打开配置编辑器

  3. 导航到系统 ApplicationHost/sites

  4. 展开 virtualDirectoryDefaults

  5. allowSubDirConfig 设置为 False

为服务器执行一次此过程。 请注意,这是一个全局设置,会影响未托管在网站根文件夹中的应用程序。

可选择让符号文件可浏览

  1. 导航到[计算机] | 站点 | [网站] | 符号

  2. 双击中心窗格中的“目录浏览”

  3. 在右侧窗格中单击“启用”。

下载内容的 MIME 类型需要设置为 application/octet-stream,这样 IIS 才能传送所有符号文件。

配置 MIME 类型

  1. 右键单击“符号”虚拟目录,然后选择“属性”。

  2. 选择“HTTP 标头”。

  3. 单击 MIME 类型

  4. 单击新建

  5. 对于“扩展”,请键入 *

  6. 对于“MIME 类型”,请键入 application/octet-stream

  7. 要退出“MIME 类型”对话框,请单击“确定”。

  8. 若要退出符号属性,请单击确定

可以编辑 web.config 文件,为符号配置 MIME 类型。 此方法可清除继承的 MIME 类型,并添加一个万能通配符 * MIME 类型。 当 MIME 类型在某些 IIS 配置中被继承时,可能需要使用此方法。

使用 web.config 配置 MIME 类型

  1. 编辑 web.config 文件,如此处所示。

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <directoryBrowse enabled="true" />
            <staticContent>
                <clear />
                <mimeMap fileExtension=".*" 
    mimeType="application/octet-stream" />
            </staticContent>
        </system.webServer>
    </configuration>
    
  2. 重启 IIS。

现在 IIS 已准备就绪,可以从符号存储提供各种类型的符号文件。

配置身份验证

可以将 IIS 配置为使用“集成 Windows 身份验证”,这样客户端(例如 windbg.exe)就可以自动对 IIS 进行身份验证,而无需提示最终用户提供凭据。

注意仅在 IIS 上配置 Windows 身份验证,以控制对符号服务器的访问(如果这样适合具体环境)。 如果环境需要,还有其他安全选项可用于进一步控制对 IIS 的访问。

将身份验证方法配置为匿名

  1. 启动 Internet Information Services (IIS) 管理器

  2. 导航到[计算机] | 站点 | [网站] | 符号

  3. 在中间窗格中双击身份验证

  4. 在“身份验证和访问控制”下,单击“编辑”。

  5. 右键单击“Windows 身份验证”,然后选择“启用”。

  6. 对于所有其他身份验证提供程序,右键单击每个提供程序并选择“禁用”。

  7. 单击“确定”完成身份验证配置。

如果未列出窗口身份验证,请使用“打开和关闭 Windows 功能”来启用该功能。 在每个版本的 Windows 中,该功能的位置都不尽相同。 在 Windows 8.1/Windows 2012 R2 中,它位于“Internet Information Services 下 | 万维网服务 | 安全”下。

禁用 Kerberos 支持

在连接 IIS 时,SymSrv.dll 不支持 Kerberos 身份验证。 因此,必须在 IIS 中禁用 Kerberos 身份验证,并将 NTLM 设置为唯一的 Windows 身份验证协议。

注意仅当适合环境时,才会禁用 Kerberos 安全性。

使用 appcmd.exe 禁用 Kerberos 支持

  1. 打开“命令提示符”窗口

  2. 要禁用 Kerberos 并强制使用 NTLM,请使用此命令:

    appcmd.exe set config -section:system.webServer/security/authentication/windowsAuthentication /+"providers.[value='NTLM']" /commit:apphost
    
  3. 要返回启用 Kerberos 的默认值,请使用以下命令:

    appcmd.exe set config -section:system.webServer/security/authentication/windowsAuthentication /+"providers.[value='Negotiate,NTLM']" /commit:apphost
    

配置 SymSrv 客户端身份验证提示

当 SymSrv 收到身份验证请求时,调试器可以显示身份验证对话框,也可以自动拒绝请求,具体取决于配置方式。 可以使用 !sym prompts on|off 来配置此行为。 例如,要打开提示,请使用此命令。

!sym prompts on

要检查当前设置,请使用此命令。

!sym prompts

有关详细信息,请参阅 !sym防火墙和代理服务器