IIS 7.0 与 Windows Server 2008 故障排除与模块解析
1. 故障排除工具与策略
在开发和管理网站时,一些开发者认为在每个网站上设置特定功能很有价值。这样做能让他们在错误发生时收到详细的错误报告,从而主动解决软件中的任何漏洞。所提供的信息非常丰富,有助于重现和解决问题。ELHAM 就是这样一个值得添加到工具包中的工具,无论是开发者主动使用,还是为了改进有问题的网站,它都能发挥作用。
对于 IIS 7.0 和 Windows Server 2008 的故障排除,本章列出的工具并非全部。始终留意新工具并尝试各种可用工具非常重要。Microsoft 的网站 www.iis.net 是获取最新工具和信息的官方支持网站,开发者应随时关注该网站以了解最新工具动态。
IIS 7.0 和 Windows Server 2008 提供了丰富的工具,既有新工具也有沿用已久的工具。系统管理员只要有合适的工具和解决问题的决心,就能解决最复杂的问题。除了 IIS 7.0 自带的故障排除工具外,了解一些通用的故障排除方法也很重要。
IIS 7.0 在故障排除方面有了显著改进。例如,使用新的运行时状态和控制功能,现在不仅可以查看当前正在运行的工作进程,还能查看当前正在运行的页面以及它们的运行时间。这可以通过 IIS 管理器、AppCmd.exe 或代码来实现。
自定义错误功能在 IIS 7.0 中也得到了极大改进,能让你更深入了解实际问题。许多错误页面不仅外观更简洁,还提供详细的建议和链接,帮助你解决问题。
另一个新特性是失败请求跟踪,它可以将你想要跟踪的特定页面(无论是失败页面还是长时间运行的页面)的信息保存到磁盘。这使你能够深入了解页面请求的生命周期,缩小问题范围,而无需购买昂贵的第三方工具或学习复杂的跟踪命令。
除了 IIS 7.0 内部提供的工具外,还有许多 Microsoft 工具和第三方工具提供更强大的故障排除选项。提前熟悉这些工具和一些故障排除原则,将使你在问题出现时能够快速解决几乎任何问题。经过一些实践,任何管理员都能熟练掌握 IIS 7.0 故障排除技巧,应对最困难的情况。
2. 模块参考
以下是随 Windows Server 2008 附带的 Microsoft IIS 7.0 模块,这些模块来自 Microsoft 的 IIS 7.0 模块参考(www.iis.net/articles/view.aspx/IIS7/Managing-IIS7/Configuring-the-IIS7-Runtime/Configuring-Modules/IIS7-Modules-Overview)。
2.1 实用模块
这些模块不提供请求服务,而是协助服务器引擎进行内部操作。
| 模块名称 | 描述 | 配置部分 | 依赖项 | 移除该模块的潜在问题 |
| — | — | — | — | — |
| UriCacheModule | 为特定于 URL 的服务器状态(如配置)实现通用缓存。服务器仅在首次请求特定 URL 时读取配置,并在后续请求中重用,直到配置更改。 | 无 | 无 | 由于每个请求都要重新获取每个 URL 的缓存状态,会导致性能损失。 |
| ManagedEngine | 负责将 IIS 与 ASP.NET 运行时集成。 | 无 | 无 | 禁用 ASP.NET 集成。当应用程序池以集成模式运行时,
<modules>
中声明的托管模块或
<handlers>
部分声明的 ASP.NET 处理程序将不会被调用。 |
| TokenCacheModule | 缓存基于密码的身份验证方案(匿名身份验证、基本身份验证、IIS 客户端证书身份验证)的 Windows 安全令牌。 | 无 | 无 | 性能损失。如果令牌未缓存,每个请求都需要用户登录。例如,受密码保护的 HTML 页面引用 50 个同样受保护的图像时,会导致 51 次对本地账户数据库或域外域控制器的 logonUser 调用。 |
| FileCacheModule | 缓存服务器引擎和模块打开的文件句柄。 | 无 | 无 | 性能损失。如果文件句柄未缓存,每个请求都需要打开文件。 |
2.2 IIS 7.0 本机模块
| 模块名称 | 描述 | 配置部分 | 依赖项 | 移除该模块的潜在问题 |
|---|---|---|---|---|
| StaticCompressionModule | 实现静态内容的压缩(内存中以及文件系统中的持久压缩)。 | system.webServer/httpCompression 和 system.webServer/urlCompression | 无 | 由于未压缩的内容返回给客户端,可能导致带宽饱和。 |
| DynamicCompressionModule | 实现动态内容的内存中压缩。 | system.webServer/httpCompression 和 system.webServer/urlCompression | 无(动态压缩默认关闭) | 无 |
| HttpCacheModule | 实现 IIS 7.0 输出缓存以及在 http.sys 缓存中缓存项目的逻辑。启用此模块后,可通过配置设置缓存大小、输出缓存配置文件等。 | System.webServer/caching | 无 | 内容将不再在内核模式下缓存,缓存配置文件也将被忽略。移除该模块可能对性能和资源使用产生不利影响。 |
| ProtocolSupportModule | 实现自定义和重定向响应头,实现跟踪和 Options HTTP 动词,通过配置支持允许或关闭保持活动状态。 | system.webServer/httpProtocol | 无 | TRACE 或 OPTIONS 请求将返回“405 Method not allowed”错误消息。 |
| DirectoryListingModule | 实现目录浏览功能。 | system.webServer/directoryBrowse | 无 | 如果默认文档模块和目录列表模块都不处理对 /(未指定页面的文件夹)的请求,则将返回空响应。 |
| DefaultDocumentModule | 实现默认文档功能,即带有尾随 / 的请求将重定向到默认文档列表中的文档。 | system.webServer/defaultDocument | 无 | 对 /(如 http://localhost)的请求将返回 404 错误。如果启用了目录浏览,则会生成目录列表。 |
| HttpRedirectionModule | 实现重定向功能。 | system.webServer/httpRedirect | 无 | 如果资源通过重定向进行保护,移除重定向模块可能会导致安全问题,内容将再次变得可访问。 |
| StaticFileModule | 发送具有 .html、.jpg 等文件扩展名的静态文件。文件扩展名列表由 staticContent/mimeMap 配置集合确定。 | system.webServer/staticContent | 无 | 静态文件将不再提供服务。文件请求将返回 200 OK 但实体主体为空。 |
| ServerSideIncludeModule | 实现服务器端包含。此模块映射为处理程序,仅对以 .stm、.shtm 和 .shtml 结尾的请求执行。 | system.webServer/serverSideInclude | 无 | .stm、.shtm 和 .shtml 文件将由静态文件模块处理。如果该模块对这些扩展名有 mimeMap,则文件将作为文本提供服务,但这不是默认情况。 |
| BasicAuthenticationModule | 实现 RFC 2617 中描述的 HTTP 基本身份验证。 | system.webServer/security/authentication/basicAuthentication | 无 | 至少必须配置一个身份验证模块。IIS 服务器核心在身份验证阶段后检查 HttpUser 对象是否填充。如果没有身份验证模块填充 HttpUser 对象,将生成 401.2 错误。 |
| CertificateMappingAuthenticationModule | 将 SSL 客户端证书映射到 Active Directory 账户(Active Directory 证书映射)。 | system.webServer/security/authentication/clientCertificateMappingAuthentication | SSL 必须配置,IIS 机器必须是 Active Directory 域的成员。 | 如果使用 Active Directory 证书映射来保护目录,但移除该模块,请求将被允许。 |
| AnonymousAuthenticationModule | 实现匿名身份验证,即如果 URL 配置为允许匿名身份验证,此模块将生成 HttpUser 对象。 | system.webServer/security/authentication/anonymousAuthentication | 无 | 至少必须配置一个身份验证模块。IIS 服务器核心在身份验证阶段后检查 HttpUser 对象是否填充。如果没有身份验证模块填充 HttpUser 对象,将生成 401.2 错误。 |
| IISCertificateMappingAuthenticationModule | 实现 IIS 证书映射,将 SSL 客户端证书映射到 Windows 账户。用户凭据和映射规则存储在 IIS 配置存储中,与 Active Directory 证书映射不同。 | system.webServer/iisClientCertificateMappingAuthentication | SSL 必须配置为接收客户端证书。 | 至少必须配置一个身份验证模块。IIS 服务器核心在身份验证阶段后检查 HttpUser 对象是否填充。如果没有身份验证模块填充 HttpUser 对象,将生成 401.2 错误。 |
| DigestAuthenticationModule | 实现 RFC 2617 中描述的摘要身份验证。 | system.webServer/security/authentication/digestAuthentication | IIS 服务器必须是 Active Directory 域的一部分。 | 至少必须配置一个身份验证模块。IIS 服务器核心在身份验证阶段后检查 HttpUser 对象是否填充。如果没有身份验证模块填充 HttpUser 对象,将生成 401.2 错误。 |
| WindowsAuthenticationModule | 实现 Windows 身份验证(NTLM 或 Negotiate (Kerberos))。 | system.webServer/security/authentication/windowsAuthentication | 无 | 至少必须配置一个身份验证模块。IIS 服务器核心在身份验证阶段后检查 HttpUser 对象是否填充。如果没有身份验证模块填充 HttpUser 对象,将生成 401.2 错误。 |
| IpRestrictionModule | 实现基于客户端请求的 IPv4 地址的授权方案。 | system.webServer/security/ipSecurity | 必须安装 IPv4 堆栈。 | IP 地址在 ipSecurity 列表中的客户端将被允许访问。 |
| IsapiFilterModule | 实现 ISAPI 过滤器功能。 | system.webServer/isapiFilters | 无 | ISAPI 过滤器通常实现应用程序依赖的功能,如 ASP.NET 或 SharePoint。例如,ASP.NET 需要 aspnet_filter.dll 来保护敏感内容和重写 URL。移除该模块将阻止 IIS 加载 ISAPI 过滤器,应用程序可能停止工作或暴露敏感内容。 |
| IsapiModule | 实现 ISAPI 扩展功能。 | system.webServer/isapiCgiRestriction | 无 |
<handlers>
部分映射的 ISAPI 扩展(modules = “IsapiModule”)或显式调用的 ISAPI 扩展将不再工作。
|
| UrlAuthorizationModule | 根据配置规则实现授权。 | system.webServer/security/authorization | 无 | 保护内容的授权规则将不再评估,原本应受保护的内容可能会被提供。 |
| CustomErrorModule | 实现自定义错误和新的 IIS 7 详细错误功能。 | system.webServer/httpErrors | 无 | 当核心服务器内发生错误时,IIS 7 将返回带有最少信息的空白页面。 |
| CustomLoggingModule | 在 IIS 7.0 之上实现 ILogPlugin 接口。不建议使用此接口扩展 IIS 7,建议编写模块并订阅 RQ_LOG_REQUEST 通知。 | system.webServer/httpLogging 和 system.applicationhost/sites/site/logFile/customLogPluginClsid | 无 | 自定义日志插件将不再被调用。例如,ODBC 日志记录就是作为 ILogPlugin 实现的。 |
| RequestFilteringModule | 实现一组强大的安全规则,在早期阶段拒绝可疑请求。该模块是 IIS 5 和 6 中附带的 ISAPI 过滤器 UrlScan.DLL 的继任者。 | system.webServer/security/requestFiltering | 无 | 如果移除该模块,requestFiltering 部分指定的规则将不再应用,可能导致安全问题。 |
| CgiModule | 在 IIS 7.0 之上实现 CGI。 | system.webServer/cgi 和 system.webServer/isapiCgiRestriction | 无 | CGI 程序将停止工作。 |
| RequestMonitorModule | 实现 IIS 7.0 运行时状态和控制接口 (RSCA)。RSCA 允许其使用者查询运行时信息,如当前执行的请求、网站的启动/停止状态或当前执行的应用程序域。 | 无 | 无 | RSCA 接口将停止工作。 |
| FailedRequestsTracingModule | 实现失败请求的跟踪。可以通过配置定义失败请求的规则。 | system.webServer/tracing 和 system.webServer/httpTracing | 无 | 跟踪 HTTP 请求将不再工作。 |
| HttpLoggingModule | 通过告诉 HTTP.SYS 要记录的内容来实现标准 IIS 日志记录。 | system.applicationHost/log 和 system.webServer/httpLogging | 无 | 标准 IIS 日志记录将不再工作。 |
3. 托管模块
| 模块名称 | 描述 | 配置部分 | 依赖项 | 移除该模块的潜在问题 |
|---|---|---|---|---|
| global.asax | 确保应用程序启动时执行 global.asax。 | 无 | ManagedEngine 模块必须安装。 | 在集成模式下,global.asax 将不会执行。 |
| ConfigurationValidationModule | 验证配置文件。 | system.webServer/Validation | 无 | 实现配置验证,例如,当应用程序以集成模式运行,但在 system.web 部分声明了处理程序或模块时。 |
| TracingModule | 实现 ETW 跟踪。 | system.webServer/httpTracing | 无 | 如果移除该模块,ETW 跟踪将不再工作。 |
| FormsAuthentication | 详情见 ASP.NET 2.0 文档。 | system.web/authentication | ManagedEngine 模块必须安装。 | 无 |
| WindowsAuthentication | 详情见 ASP.NET 2.0 文档。 | system.web/authentication | ManagedEngine 模块必须安装。 | 无 |
| Session | 详情见 ASP.NET 2.0 文档。 | system.web/sessionState | ManagedEngine 模块必须安装。 | 托管会话状态将不可用。 |
| OutputCache | 详情见 ASP.NET 2.0 文档。本机 HttpCacheModule 以本机代码实现 OutputCache 功能,为托管输出缓存提供可扩展且快速的本机替代方案。 | system.web/caching/outputCache | ManagedEngine 模块必须安装。 | 托管内容不能再将内容存储在托管输出缓存中。 |
| AnonymousIdentification | 详情见 ASP.NET 2.0 文档。 | 无 | ManagedEngine 模块必须安装。 | 无 |
| UrlAuthorization | 详情见 ASP.NET 2.0 文档。本机 UrlAuthorization 模块以本机代码实现 URL 授权功能,为托管 URL 授权模块提供可扩展且快速的本机替代方案。 | system.web/authorization | ManagedEngine 模块必须安装。 | 无 |
| RoleManager | 详情见 ASP.NET 2.0 文档。 | 无 | ManagedEngine 模块必须安装。 | 角色管理器功能将不可用。 |
| DefaultAuthentication | 详情见 ASP.NET 2.0 文档。 | system.web/authentication | ManagedEngine 模块必须安装。 | 无 |
| UrlMappingsModule | 详情见 ASP.NET 2.0 文档。 | 无 | ManagedEngine 模块必须安装。 | 无 |
| Profile | 详情见 ASP.NET 2.0 文档。 | 无 | ManagedEngine 模块必须安装。 | 无 |
4. IIS 状态代码
以下是常见的 HTTP 状态代码分类及含义:
-
1xx - 信息性状态码
:表示临时响应。客户端应准备好在收到常规响应之前接收一个或多个 1xx 响应。
- 100 - Continue
- 101 - Switching protocols
-
2xx - 成功状态码
:表示服务器成功接受了客户端请求。
- 200 - OK
- 201 - Created
- 202 - Accepted
- 203 - Non - authoritative information
- 204 - No content
- 205 - Reset content
- 206 - Partial content
-
3xx - 重定向状态码
:客户端浏览器必须采取更多行动来完成请求。例如,浏览器可能需要请求服务器上的不同页面或通过代理服务器重复请求。
- 301 - Moved permanently
- 302 - Object moved
- 304 - Not modified
- 307 - Temporary redirect
-
4xx - 客户端错误状态码
:表示发生错误,且客户端似乎有过错。例如,客户端可能请求不存在的页面,或未提供有效的身份验证信息。
- 400 - Bad request
- 401 - Access denied(IIS 定义了多个不同的 401 错误,指示更具体的错误原因。这些特定错误代码会在浏览器中显示,但不会在 IIS 日志中显示)
- 401.1 - Logon failed
- 401.2 - Logon failed due to server configuration
- 401.3 - Unauthorized due to ACL on resource
- 401.4 - Authorization failed by filter
- 401.5 - Authorization failed by ISAPI/CGI application
- 401.7 - Access denied by URL authorization policy on the Web server(特定于 IIS 6.0)
- 403 - Forbidden(IIS 定义了多个不同的 403 错误,指示更具体的错误原因)
- 403.1 - Execute access forbidden
- 403.2 - Read access forbidden
- 403.3 - Write access forbidden
- 403.4 - SSL required
- 403.5 - SSL 128 required
- 403.6 - IP address rejected
- 403.7 - Client certificate required
- 403.8 - Site access denied
- 403.9 - Too many users
- 403.10 - Invalid configuration
- 403.11 - Password change
- 403.12 - Mapper denied access
- 403.13 - Client certificate revoked
- 403.14 - Directory listing denied
- 403.15 - Client Access Licenses exceeded
- 403.16 - Client certificate is untrusted or invalid
- 403.17 - Client certificate has expired or is not yet valid
- 403.18 - Cannot execute requested URL in the current application pool(特定于 IIS 6.0)
- 403.19 - Cannot execute CGIs for the client in this application pool(特定于 IIS 6.0)
- 403.20 - Passport logon failed(特定于 IIS 6.0)
- 404 - Not found
- 404.0 - (None) - File or directory not found
- 404.1 - Web site not accessible on the requested port
- 404.2 - Web service extension lockdown policy prevents this request
- 404.3 - MIME map policy prevents this request
- 405 - HTTP verb used to access this page is not allowed (method not allowed)
- 406 - Client browser does not accept the MIME type of the requested page
- 407 - Proxy authentication required
- 412 - Precondition failed
- 413 - Request entity too large
- 414 - Request - URI too long
- 415 - Unsupported media type
- 416 - Requested range not satisfiable
- 417 - Execution failed
- 423 - Locked error
-
5xx - 服务器错误状态码
:表示服务器因遇到错误而无法完成请求。
- 500 - Internal server error
- 500.12 - Application is busy restarting on the Web server
- 500.13 - Web server is too busy
- 500.15 - Direct requests for Global.asa are not allowed
通过对这些工具、模块和状态代码的了解,开发者和系统管理员可以更好地进行 IIS 7.0 和 Windows Server 2008 的故障排除和管理工作。在实际操作中,遇到问题时可以根据具体情况,结合这些知识进行分析和解决。例如,当遇到 404 错误时,可以检查文件是否存在、端口是否正确、MIME 映射是否正确等;当移除某个模块时,要考虑可能出现的潜在问题,并提前做好应对措施。同时,不断关注新的工具和技术,提升自己的技能水平,以更好地应对各种复杂的情况。
IIS 7.0 与 Windows Server 2008 故障排除与模块解析
5. 故障排除流程示例
为了更清晰地展示如何利用上述工具和知识进行故障排除,下面给出一个简单的故障排除流程示例,使用 mermaid 流程图表示:
graph LR
A[发现问题] --> B{问题类型?}
B -->|4xx 客户端错误| C[检查客户端请求信息]
C --> D{是否请求不存在页面?}
D -->|是| E[检查文件路径和 MIME 映射]
D -->|否| F[检查身份验证信息]
B -->|5xx 服务器错误| G[查看服务器日志和错误信息]
G --> H{是否内部服务器错误?}
H -->|是| I[检查应用程序池和配置文件]
H -->|否| J[检查服务器资源使用情况]
B -->|其他类型| K[使用失败请求跟踪工具]
K --> L[分析跟踪信息,定位问题]
E --> M[修复文件路径或更新 MIME 映射]
F --> N[更新身份验证信息]
I --> O[重启应用程序池或修改配置文件]
J --> P[释放服务器资源]
L --> Q[根据分析结果采取相应措施]
M --> R[测试问题是否解决]
N --> R
O --> R
P --> R
Q --> R
R --> S{问题解决?}
S -->|是| T[结束]
S -->|否| A
这个流程图展示了一个基本的故障排除思路:
1. 发现问题后,首先判断问题类型是 4xx 客户端错误、5xx 服务器错误还是其他类型。
2. 对于 4xx 客户端错误,检查客户端请求信息,进一步判断是否是请求不存在页面或身份验证问题。
3. 对于 5xx 服务器错误,查看服务器日志和错误信息,判断是内部服务器错误还是服务器资源问题。
4. 对于其他类型的问题,使用失败请求跟踪工具进行分析。
5. 根据不同的问题原因采取相应的解决措施,如修复文件路径、更新身份验证信息、重启应用程序池等。
6. 测试问题是否解决,如果未解决则重新开始故障排除流程。
6. 模块使用建议
在实际使用中,对于不同的模块可以根据具体需求进行合理配置和使用,以下是一些建议:
-
实用模块
-
UriCacheModule
:一般情况下建议保留,以提高服务器性能。除非有特殊需求,否则不要轻易移除。
-
ManagedEngine
:如果使用 ASP.NET 应用程序,必须保留该模块,以确保 ASP.NET 集成正常工作。
-
TokenCacheModule
:对于需要频繁进行身份验证的网站,保留该模块可以显著提高性能。
-
FileCacheModule
:同样,为了避免每次请求都打开文件,建议保留该模块。
-
IIS 7.0 本机模块
-
StaticCompressionModule
:如果网站有大量静态内容,启用该模块可以减少带宽使用,提高用户访问速度。
-
HttpCacheModule
:对于缓存需求较高的网站,合理配置该模块可以提高性能,但要注意缓存策略的设置。
-
RequestFilteringModule
:为了提高网站的安全性,建议启用该模块,并根据实际情况配置安全规则。
-
托管模块
-
global.asax
:如果应用程序依赖于 global.asax 文件的执行,必须保留该模块。
-
OutputCache
:对于需要缓存托管内容的应用程序,可以考虑使用该模块,但要注意与本机 HttpCacheModule 的区别和配合使用。
7. 总结与展望
通过对 IIS 7.0 和 Windows Server 2008 的故障排除工具、模块以及状态代码的详细介绍,我们了解到这些资源为开发者和系统管理员提供了强大的支持。在实际工作中,我们可以利用这些知识快速定位和解决各种问题,提高网站的稳定性和性能。
同时,随着技术的不断发展,新的工具和技术也在不断涌现。我们应该保持学习的热情,关注 Microsoft 的官方网站(www.iis.net),及时了解最新的工具和信息。在面对复杂的问题时,要善于结合多种工具和方法进行分析和解决,不断积累经验,提升自己的故障排除能力。
未来,我们可以期待 IIS 7.0 及相关技术在性能、安全性和易用性方面会有进一步的提升。例如,可能会有更智能的故障诊断工具,能够自动分析问题并提供解决方案;模块的配置和管理也可能会更加简化和灵活。作为开发者和系统管理员,我们要紧跟技术发展的步伐,不断适应新的变化,为用户提供更好的服务。
总之,掌握 IIS 7.0 和 Windows Server 2008 的故障排除知识和技能是非常重要的,希望本文能为大家在实际工作中提供一些帮助和参考。
超级会员免费看
89

被折叠的 条评论
为什么被折叠?



