IIS 相关技术全面解析
1. IIS 状态码
IIS 状态码是用于标识服务器响应状态的重要标识,不同的状态码代表不同的情况。以下为你详细介绍常见的 IIS 状态码及其含义:
|状态码|含义|
| ---- | ---- |
|500.16|UNC 授权凭证不正确,特定于 IIS 6.0|
|500.18|无法打开 URL 授权存储,特定于 IIS 6.0|
|500.100|内部 ASP 错误|
|501|头部值指定了未实现的配置|
|502|作为网关或代理时,Web 服务器收到无效响应|
|502.1|CGI 应用程序超时|
|502.2|CGI 应用程序出错|
|503|服务不可用,特定于 IIS 6.0|
|504|网关超时|
|505|不支持的 HTTP 版本|
2. FTP 状态码
FTP 状态码同样在文件传输过程中起着关键作用,它能让用户清晰了解传输的状态。以下是 FTP 状态码的分类及具体含义:
-
1xx - 积极初步回复
:表示操作已成功启动,但客户端在继续执行新命令之前需要等待另一个回复。
- 110:重启标记回复
- 120:服务将在 nnn 分钟后就绪
- 125:数据连接已打开,开始传输
- 150:文件状态正常,即将打开数据连接
-
2xx - 积极完成回复
:表示操作已成功完成,客户端可以执行新命令。
- 200:命令正常
- 202:命令未实现,在此站点多余
- 211:系统状态或系统帮助回复
- 212:目录状态
- 213:文件状态
- 214:帮助消息
- 215:NAME 系统类型,其中 NAME 是《分配号码文档》列表中的官方系统名称
- 220:服务为新用户就绪
- 221:服务关闭控制连接,如有必要则注销
- 225:数据连接打开,无传输进行中
- 226:关闭数据连接,请求的文件操作成功(例如文件传输或文件中止)
- 227:进入被动模式 (h1,h2,h3,h4,p1,p2)
- 230:用户已登录,可以继续
- 250:请求的文件操作正常,已完成
- 257:“PATHNAME”已创建
-
3xx - 积极中间回复
:表示命令成功,但服务器需要客户端提供更多信息才能完成请求处理。
- 331:用户名正常,需要密码
- 332:登录需要账户
- 350:请求的文件操作等待更多信息
-
4xx - 临时负面完成回复
:表示命令未成功,但错误是临时的。如果客户端重试命令,可能会成功。
- 421:服务不可用,关闭控制连接。如果服务知道必须关闭,这可能是对任何命令的回复
- 425:无法打开数据连接
- 426:连接关闭,传输中止
- 450:请求的文件操作未执行,文件不可用(例如文件忙)
- 451:请求的操作中止:本地处理错误
- 452:请求的操作未执行,系统存储空间不足
-
5xx - 永久负面完成回复
:表示命令未成功,且错误是永久的。如果客户端重试命令,将收到相同的错误。
- 500:语法错误,命令未识别。可能包括命令行过长等错误
- 501:参数或参数语法错误
- 502:命令未实现
- 503:命令序列错误
- 504:该参数的命令未实现
- 530:未登录
- 532:存储文件需要账户
- 550:请求的操作未执行,文件不可用(例如文件未找到,无访问权限)
- 551:请求的操作中止:页面类型未知
- 552:请求的文件操作中止,超出存储分配(对于当前目录或数据集)
- 553:请求的操作未执行,文件名不允许
3. WCF 基础介绍
Windows Communication Foundation (WCF) 是微软为面向服务的应用程序推出的全新统一编程模型。它最初随 Microsoft .NET Framework v3 发布,并包含在 Windows Server 2008 中。WCF 与 IIS 7.0 共享多个组件,具备由 IIS 7.0 托管的能力,但不一定通过 HTTP 公开。
传统的应用程序多为面向对象的,在这种模型中,一组类为对象提供模板,应用程序在运行时创建这些类的实例(即对象实例)。这些对象暴露接口、方法和属性,允许其他对象对其进行操作。然而,这种编程方式通常被认为是“紧密耦合”的,因为每个对象(无论是在单台机器上运行还是跨多台机器运行)都需要理解传递给它的“类型”(例如字符串、整数和其他对象类型)。在多个平台和技术上实现这样一致的类型系统可能会很困难。
与之不同的是,面向服务的编程涉及一组离散的服务,它们通过消息相互交互。这些服务不需要共享通用的类型系统,而是每个服务共享一个描述其接受的数据的架构,以及一个定义其行为的契约。Web 服务(ASP.NET 或其他)就是面向服务编程的一个例子。
面向服务编程的四个核心原则如下:
-
边界明确
:服务边界被正式且明确地定义,服务不会对其边界之外的内容做出假设。这允许需要相互交互的服务进行灵活部署,但需要架构师和开发人员具备纪律性,因为如果服务调用跨越地理区域或信任域,可能会产生较高的成本。相比之下,面向对象编程通常试图向开发人员抽象远程(分布式)或本地对象的概念,因此在调用另一个对象时,并不总是清楚会产生哪些成本或假设。
-
服务自治
:服务不应依赖于被调用的服务是否可用,甚至不依赖于其是否位于特定位置。没有中央权威负责服务的管理或版本控制。相比之下,面向对象编程通常要求在应用程序中的某个组件发生更改时,重新部署整个应用程序或更新客户端。
-
服务共享架构和契约
:服务通过架构共享它们将交换的数据,并通过契约共享它们暴露的行为。服务的内部操作实现对外部是隐藏的。相比之下,面向对象编程通常涉及对象和类型的传递,导致一个紧密耦合的环境。
-
兼容性基于策略
:服务使用策略来确定它们的共同之处以及如何相互交互。更改服务的访问权限不需要更改任何内部服务配置,而是更新一个机器可读的策略。
4. WCF 与 ASP.NET Web 服务的关系
WCF 可以被视为 ASP.NET Web 服务的继承者。ASP.NET Web 服务紧密耦合于 HTTP 协议作为传输方式,以及一种冗长的基于文本的二进制消息格式。在许多应用程序中,需求决定了需要使用其他通信机制,例如在应用程序响应性和性能至关重要时使用 .NET Remoting。WCF 将这些不同的部分整合在一起,允许在一系列协议和服务上进行面向服务的开发。WCF 支持通过 HTTP、命名管道、MSMQ 和 TCP 进行服务调用。
5. WAS 与 WCF 的结合
除了支持额外的协议传输外,WCF 服务还可以在 IIS 之外进行托管。WCF 服务可以在以下环境中托管:
- 在客户端管理的应用程序(即独立的 .exe .NET 应用程序)中。
- 在托管服务(即使用 .NET 编写的 Windows NT 服务)中。
- 在 IIS 6.0(Windows Server 2003 和 Windows XP x64)或 IIS 5.1(Windows XP x86)中,与 ASP.NET Web 服务类似。
- 在带有 Windows Process Activation Services 的 IIS 7.0 中。
在 IIS 6.0 中,Web 激活服务 (WAS) 负责读取 IIS 元数据库,并在系统接收到传入的 HTTP 请求时激活新的工作进程 (w3wp.exe)。在 Windows Server 2008 中,Windows 进程激活服务已从 W3SVC 服务中分离出来,成为一个独立的服务。W3SVC 和 WAS 都存在于一个共享的 svchost.exe 进程中(但可以独立启动和停止)。W3SVC 仍然负责接收传入的 HTTP 请求,而 WAS 现在可在系统范围内用于进程激活和处理(回收、监控等)。
分离 Windows 进程激活服务的主要原因之一是为了支持 WCF。由于 WCF 支持多种底层传输,通过这些传输路由的传入请求可以由传输侦听器适配器接收。如果 WCF 服务由 IIS 7.0 托管,那么 WAS 将检查请求的目标,并在需要时激活一个新进程 (w3wp.exe) 来托管该服务。以这种方式托管的 WCF 服务可以从 WAS 的进程管理中受益(按需激活、非活动超时停用、回收等)。W3SVC 服务仍然负责从 Http.sys 接收传入的 HTTP 请求,但它使用与 WCF 侦听器适配器相同的适配器接口与 WAS 进行通信。
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
Http.sys -->|接收请求| W3SVC
W3SVC -->|通信| WAS
WAS -->|激活进程| w3wp.exe
WAS -->|读取配置| applicationHost.config
subgraph 传输协议
Net.TCP
Net.MSMQ
Net.Pipe
end
Net.TCP -->|请求路由| 传输侦听器适配器
Net.MSMQ -->|请求路由| 传输侦听器适配器
Net.Pipe -->|请求路由| 传输侦听器适配器
传输侦听器适配器 -->|接收请求| WAS
6. 配置 WCF 应用程序
开发和部署 WCF 服务超出了本文的范围,但作为 IIS 管理员,你可能需要在 IIS 7.0 上部署 WCF 服务,类似于部署其他应用程序。以下是配置项的简要总结:
-
安装 WCF 功能
:最初,你需要安装 WCF HTTP 和/或非 HTTP 激活功能。这可以通过安装应用程序服务器角色或通过服务器管理器专门安装 WCF HTTP 和/或 WCF 非 HTTP 激活功能(位于 .NET Framework v3 下)来完成。
-
更新网站绑定
:要配置网站以支持基于非 HTTP 的激活,需要更新网站的绑定以支持额外的协议。可以使用 AppCmd.exe 或 GUI 来完成此操作,类似于添加额外的 HTTP 或 FTP 绑定。例如,使用 AppCmd 添加额外绑定的代码如下:
appcmd.exe set site “Default Web Site” -+bindings.[protocol=’net.tcp’,bindingInformation=’8080:*’]
此代码将为默认网站添加一个端口为 8080 的额外 Net.TCP 绑定。
-
启用协议
:除了额外的绑定外,托管 WCF 服务的 Web 应用程序需要启用 NET.TCP 协议。默认情况下,Web 应用程序是 HTTP 启用的。可以使用 IIS 管理器管理工具或 AppCmd 来添加额外的协议,示例代码如下:
appcmd.exe set app “Default Web Site/Application1” /enabledProtocols:http,net.tcp
- 分配应用程序池 :IIS 7.0 中的每个 Web 应用程序都分配给一个 Web 应用程序池,此分配决定了哪些应用程序在哪个 w3wp.exe 工作进程中运行。将 WCF 应用程序分配给 Web 应用程序池与将任何其他基于 HTTP 的应用程序分配给 Web 应用程序池没有区别。同样,可以使用 GUI 或 AppCmd 来完成此操作。
-
配置 WCF 服务
:每个 WCF 服务可能在其自己的配置文件中有配置。这些设置存储在应用程序根文件夹中的 web.config 文件中。就像 IIS 7.0 设置存储在
<system.webServer></system.webServer>配置容器中,ASP.NET 设置存储在<system.web></system.web>中一样,WCF 设置存储在<system.serviceModel></system.serviceModel>部分。以下配置启用了 NET.TCP 端点:
<system.serviceModel>
<services>
<service name=”Application1”>
<!-- 暴露端点 net.tcp://servername:8080/Application1/service.svc -->
<endpoint address=”“ binding=”netTCPBinding” />
</service>
</services>
</system.serviceModel>
通常,这些配置由应用程序的开发人员完成,然后将配置文件简单地放置在 WCF 服务的根文件夹中。作为 IIS 管理员,你可能需要以类似于部署 ASP.NET 应用程序或 Web 服务的方式部署 WCF 服务或应用程序。部署由 IIS 7.0 托管的 WCF 服务涉及对存储在与 IIS 7.0 存储其自身配置相同的配置文件中的配置进行更改。此配置信息由 WAS 读取,并用于初始化和管理工作进程,类似于管理传统 Web 应用程序的工作进程。
7. 相关资源
为了帮助 IIS 管理员进一步学习和参考,以下是一些有用的资源和链接:
-
IIS 产品组资源
:IIS 产品组维护着 www.iis.net 网站,作为 IIS 相关资源的中央存储库,包括下载、演练、团队博客和支持论坛。以下部分可能特别有用:
- http://forums.iis.net:托管一组关于 IIS 问题的论坛,IIS 产品组成员、Microsoft MVPs 和 Microsoft PSS 工作人员会协助发帖者解决问题和回答疑问。
- http://blogs.iis.net:托管 IIS 产品组成员的博客。
- www.iis.net/downloads/default.aspx?tabid=3:提供 IIS 7.0(以及以前版本)的一组下载和附加组件,来自 IIS 产品组、Microsoft 和第三方。本书中提到的主要附加组件(如 FTP 7)可以从这里下载。
-
IIS 公共新闻组
:Microsoft 还维护着一组广泛的新闻组,涵盖许多产品(包括 IIS)。可以在这些组中找到各种 Microsoft 人员和 MVPs。可以使用新闻阅读器(如 Vista 的 Windows Mail 或 Windows XP 的 Outlook Express)访问新闻组。以下是一些较受欢迎的与 IIS 相关的新闻组:
- news://news.microsoft.com/microsoft.public.inetserver.iis
- news://news.microsoft.com/microsoft.public.inetserver.iis.security
这些新闻组也可以通过 Microsoft 社区网站上的 Web 界面访问,网址为 www.microsoft.com/communities/newsgroups/default.mspx。
-
标准文档
:许多协议和应用程序的标准包含在提交给互联网协会 (ISOC) 的 RFC(请求评论)文档中。其中一些 RFC 随后被互联网工程任务组 (IETF) 采纳为互联网标准。Web 上有几个 RFC 存储库,其中一个较受欢迎的是 www.rfcs.org,它允许你按编号检索任何 RFC 或通过文本搜索。本书中提到的一些 RFC 包括:
- HTTP v1.1 - RFC 2616
- SMTP 和 ESTMP - RFCs 1123 和 2821 分别
- MIME - RFCs 2045 至 2049 和 RFC 1521
- 摘要认证 - RFC 2617
- Kerberos v5 - RFC 4120
- FTPS - RFC 4217
-
博客
:除了前面提到的 IIS 产品组团队博客外,许多 Microsoft 工作人员在 http://blogs.msdn.com(针对开发人员)或 http://blogs.technet.com(针对管理员)上维护博客。以下由 MVPs 维护的第三方 IIS 博客也可能感兴趣:
- Scott Forsyth - http://weblogs.asp.net/owscott/
- Bernard Cheah - http://msmvps.com/bernard/
- Paul Lynch - http://www.iisadmin.co.uk/
- Ken Schaefer - http://adopenstatic.com/blog
- Chris Crowe - http://blog.crowe.co.nz/
-
Microsoft 文档
:截至撰写本文时,Microsoft 网站上的文档仍处于测试阶段,因此以下链接可能会在 Windows Server 2008 和 .NET v3.5 发布时发生变化。
- IIS 7.0 技术参考(测试版) - http://technet2.microsoft.com/windowsserver2008/en/servermanager/webserver.mspx
- IIS 7.0 本机代码核心参考(测试版) - http://msdn2.microsoft.com/en-us/library/ms692081.aspx
- IIS 7.0 托管代码参考(测试版) - http://msdn2.microsoft.com/en-us/library/aa347649.aspx
- ISAPI 参考(IIS 6.0) - http://msdn2.microsoft.com/en-us/library/ms524911.aspx
-
第三方产品和工具
:以下是本文中提到的第三方工具或产品的链接:
- Symantec i3 for Web Applications - www.symantec.com/enterprise/products/overview.jsp?pcid=2246&pvid=i3_webapps_1
- Microsoft Windows Server 2003 性能顾问 - www.microsoft.com/downloads
- Mercury SiteScope - www.mercury.com/us/products/business-availability-center/sitescope/features.html
- WebTrends - www.webtrends.com/
- Tivoli Monitoring for Web Infrastructure - www-306.ibm.com/software/tivoli/products/monitor-web/
-
安全文档
:本文主体中引用了一些安全论文,列表如下:
- Eric Glass 的 NTLM 白皮书 - http://davenport.sourceforge.net/ntlm.html
- 配置 URL 授权演练 - http://www.iis.net/articles/onepagearticle.ashx/IIS7/Managing-IIS7/Configuring-Security/URL-Authorization/Understanding-IIS7-URL-Authorization
- Brian Tung 的《傻瓜 Kerberos 指南》 - http://www.isi.edu/~brian/security/kerberos.html
IIS 相关技术全面解析
8. 重要概念与组件解析
在 IIS 相关技术体系中,有许多重要的概念和组件,它们共同构成了整个系统的运行基础。以下为你详细解析这些内容:
-
访问控制相关
:
-
访问控制条目(ACEs)
:用于定义对资源的访问权限,分为允许和拒绝两种类型。
-
访问控制列表(ACLs)
:由多个 ACEs 组成,用于管理资源的访问权限。在不同场景下有不同应用,如 NTFS、元数据库等。
-
应用程序池
:是 IIS 中重要的组件,用于隔离和管理应用程序。它具有以下特点:
-
隔离性
:不同的应用程序可以运行在不同的应用程序池中,避免相互影响。
-
安全性
:可以为应用程序池设置不同的身份和权限,提高安全性。
-
性能优化
:通过设置相关参数,如回收时间、最大工作进程数等,可以优化应用程序的性能。
-
ASP.NET
:是一种广泛使用的 Web 开发技术,与 IIS 紧密结合。它具有以下特性:
-
应用程序池支持
:可以将 ASP.NET 应用程序部署到不同的应用程序池中。
-
身份验证和授权
:提供多种身份验证和授权方式,保障应用程序的安全性。
-
配置灵活
:可以通过 web.config 文件进行灵活的配置。
9. 身份验证与授权机制
身份验证和授权是保障系统安全的重要环节,以下介绍常见的身份验证和授权方式:
|身份验证方式|特点|配置步骤|
| ---- | ---- | ---- |
|匿名身份验证|允许未经身份验证的用户访问资源|在 IIS 管理器中启用匿名访问,并设置匿名用户的身份|
|基本身份验证|使用用户名和密码进行身份验证,信息以 Base64 编码传输|在 IIS 管理器中启用基本身份验证,配置相关参数|
|摘要身份验证|使用哈希算法对用户名和密码进行加密传输|在 IIS 管理器中启用摘要身份验证,设置相关参数|
|集成 Windows 身份验证|使用 Windows 域账户进行身份验证|在 IIS 管理器中启用集成 Windows 身份验证,配置相关参数|
授权机制通常与身份验证结合使用,用于控制用户对资源的访问权限。常见的授权方式包括 URL 授权、文件授权等。
10. 配置管理与部署
配置管理和部署是确保系统正常运行的关键步骤,以下介绍相关内容:
-
配置文件
:IIS 使用多个配置文件来管理系统设置,如 applicationHost.config、web.config 等。这些文件采用 XML 格式,便于管理和维护。
-
配置方式
:可以通过直接编辑配置文件、使用 IIS 管理器或 AppCmd.exe 命令行工具进行配置。
-
部署步骤
:
1. 安装相关组件和功能,如 ASP.NET、FTP 等。
2. 创建网站和应用程序池,并进行相关配置。
3. 部署应用程序代码到相应的目录。
4. 配置身份验证和授权机制,确保系统安全。
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
安装组件 --> 创建网站和应用程序池
创建网站和应用程序池 --> 部署应用程序代码
部署应用程序代码 --> 配置身份验证和授权
11. 性能优化与监控
为了确保系统的高性能和稳定性,需要进行性能优化和监控。以下是相关的方法和工具:
-
性能优化
:
-
应用程序池优化
:合理设置应用程序池的参数,如回收时间、最大工作进程数等。
-
缓存优化
:使用输出缓存、内存缓存等技术,减少服务器的负载。
-
压缩优化
:启用静态和动态压缩,减少数据传输量。
-
监控工具
:
-
性能监视器
:可以监控系统的各种性能指标,如 CPU 使用率、内存使用率等。
-
日志分析工具
:通过分析日志文件,了解系统的运行情况和用户行为。
12. 安全防护措施
安全是系统运行的重要保障,以下介绍常见的安全防护措施:
-
防火墙
:设置防火墙规则,限制外部访问,只允许必要的端口和协议通过。
-
IP 地址限制
:通过配置 IP 地址限制,只允许特定的 IP 地址访问系统。
-
SSL/TLS 加密
:使用 SSL/TLS 协议对数据进行加密传输,保障数据的安全性。
-
漏洞扫描
:定期进行漏洞扫描,及时发现和修复系统中的安全漏洞。
13. 故障排除与解决方法
在系统运行过程中,可能会遇到各种故障。以下是常见故障的排除方法:
-
HTTP 错误
:根据 HTTP 状态码,查找相应的错误原因,并进行修复。
-
应用程序池故障
:检查应用程序池的状态和配置,重启应用程序池或调整相关参数。
-
性能问题
:使用性能监控工具,分析性能瓶颈,并进行优化。
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
出现故障 --> 确定故障类型
确定故障类型 --> 查找故障原因
查找故障原因 --> 采取解决措施
采取解决措施 --> 验证故障是否解决
验证故障是否解决 -->|未解决| 重新查找故障原因
验证故障是否解决 -->|已解决| 结束
14. 总结
通过对 IIS 相关技术的全面解析,我们了解了 IIS 状态码、FTP 状态码、WCF 基础、配置管理、身份验证与授权、性能优化、安全防护和故障排除等方面的内容。这些知识对于 IIS 管理员和开发人员来说至关重要,可以帮助他们更好地管理和维护 IIS 系统,提高系统的性能和安全性。在实际应用中,需要根据具体需求和场景,灵活运用这些技术,确保系统的稳定运行。
超级会员免费看
28

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



