文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>IIS 7 部署指南

IIS 7 部署指南

时间:2011-01-28  来源:飞鸿逝影

由于我的机器上装的是win7的系统,IIS是7.5的,所以讲到部署的时候,所指的IIS及图中所涉及到的IIS都默认是在IIS7.5下。

不过,即使使用Windows Server2008或者其他的装了IIS7的系统,在部署上也没有什么差别。

此文分两部分,前一部分说明基础的部署过程,后一部分进行更更详细的讲述,包括一些原理性的东西,以帮助理解。

IIS7基础部署过程

部署IIS按照,一般情况下,按照以下步骤进行:

1 安装IIS。
控制面板》程序和功能》打开或关闭Windows功能,确保已选中“Internet信息服务”项。

完成之后,打开IIS管理器,界面如下图所示,

注意图中“Web平台安装程序”(Microsoft Web Platform Installer)不是必需的。

2 部署站点。

“添加网站”,弹出如下图所示的“添加网站”对话框:
网站名称:指定网站的名称;
应用程序池:建议采用默认的应用程序池,即自动创建的应用程序池,名称与网站名称相同。
物理路径:即要部署的Web站点的物理路径;
传递身份验证:选择“应用程序用户”即可,一般而言无远程控制管理等特定需求的话,无需指定特殊用户;
类型:一般选择“http”,如果是安全连接(用SSL加密)则采用“https”,其他的我没用过;
IP地址:不指定的话,默认就是本机的IP;
端口:指定访问端口,不要与已有站点的端口重复,最好也不要与本机其他应用程序所使用的端口重复,

可使用DOS下的netstat命令查看当前正在使用的端口;
主机名:可以不填写,不过作为网站类应用程序而非基础应用平台的话,最好填写。

立即启动网站:勾选此选项,则站点会立即启动,如果端口与已有启动网站的端口相同,则不会启动。
设置完成之后,点击“确定”,则添加了一个新的站点,如下图所示:

3 进行相关设置
其一,检查“.NET编译”,如下图:

打开如下所示的界面:

如果站点中的某些文件(例如App_Code文件夹中的文件)如果是用C#编写的,则选择“C#”。
其二,设置应用程序池,如下图所示,点击左边的“应用程序池”,在右边

的列表中找到刚才创建的RainfeSoft应用程序池,选择图中所示的选项,弹出如下窗口。
选择所使用的.NET Framework版本,并设置托管管道模式。对于老的站点建议采用经典模式,

这样就不需要做太多的改动,对于ASP.NET 4.0的站点,建议用集成模式。关于这一点,后半部分将做详细的说明。

其三,设置权限。对于有上传下载的站点而言,权限的设置尤其重要。如下图,右击站点,点击“编辑权限”。

弹出如下窗口:

此处的配置跟IIS6.0相似。
至此,Web站点的基本设置已经完成。对于需要进行的一些特殊处理,如模块映射等等,将在下面的这一部分涉及。

IIS7部署详细探讨

从操作上来讲,IIS7的部署跟以前IIS6的部署的差别不是很大,主要的不同点是,IIS7在部署上的操作界面等都更加友好。

下面主要阐述细节处理上的一些比较重要的地方。

l 模块(Module)

IIS7 Web服务器的核心特性集已经组件化成30多个模块了,给部署带来了极大的灵活性。这些模块,要么是Win32的dll,

要么是包含.NET 类型的程序集(之所以没说成是dll,是因为现在dll的概念已经较当初的概念有所变化,

传统上所指的dll是可执行文件或者动态链接库文件,而在.NET中特指.NET程序集文件,

详见《Applied Microsoft .NET Framework Programming》),通常前者被称为本机模块,后者被成为托管模块,

这里的模块不是动态建模或者业务模块中的那个模块,这里可以理解为一个HttpModule。

要提供某些功能,则必须配置甚至开发某些模块,处理程序映射。

例如,我们的项目在开发中用到了服务器端包含指令#include,那么我们就必须给所请求的相关文件配置ServerSideIncludeModule,

使得服务器能够正确的解析.inc文件,那么在IIS6中我们的做法是配置一个相关的扩展名文件到ssinc.dll的映射,

其他的依此类推。如果在项目中继承IHttpModule实现了自己的模块,在IIS7中集成模式下,要启用这个模块,

就必须在“模块”中进行此模块的映射配置,如下图:

右击“模块”》“打开功能”,弹出如下界面:

选择“添加托管模块”:

在此处添加你所开发的模块即可。

下面进一步详述模块。

在IIS7中模块有全局模块和局部模块,全局模块的配置对服务器上的所有站点生效,而局部模块仅仅对某个站点生效。

如果希望Web服务器上的所有应用程序都使用这个模块,在需要这全局范围内注册该模块,使其对服务器上的每个工作进程生效。

注意,全局的模块的配置一般而言仅对本机模块才有必要,因为涉及到代码执行的安全性问题,所以需要管理员权限。

关于这个细节,做ASP.NET控件开发的人可能比较清楚,在反编译微软自己的Web控件或者第三方控件的时候,

经常看到控件类的上方写了一个AspNetHostingPermissionAttribute,并指定了他的两个枚举类型属性,

分别是SecurityAction和AspNetHostingPermissionLevel枚举。此特性,可能在控件开发中用的不多,

因为不进行设置的话默认继承Control类的该类特性,但是对于开发上传下载控件而言,此特性就很值得关注。

注意,在此强调一下,配置本机模块需要管理员权限,对于服务器工作进程的所有可用的资源而言,

本机代码拥有无节制的访问权限,这意味着,在配置这样的模块时,你必须确保你的模块不包含任何恶意的代码,否则后果很严重。

另外,配置此模块,对应的将是对%windir%\System32\inetsrv\config\applicationHost.config中<globalModules>配置节的更改,

所以你需要备份此文件(对于环境变量,用set命令在DOS下查看即可)。其实,前面所将的配置,

以及后面即将提到的一些配置都是对配置文件的更改,如果你熟悉底层细节,不用弄的这么复杂,直接改动相应的配置文件即可。

那么,对于配置局部模块,只需要点击具体的站点,再双击“模块”即可,过程与上面的类似,

不过这些配置只写到当前站点的配置文件中,即web.config中。顺带说一下,集成模式和经典模式下,

配置文件的格式稍有不同,特别是在模块的配置上,细节的话参见MSDN。

IIS

根据Http协议,我们知道,当用浏览器向Web服务器发送一个请求的时候,服务器返回一个响应文件,

通常叫做响应报文,包含状态行、响应头和响应体,浏览器解析其中的html标签,最终将文件中的信息显示处理。

这期间,IIS就负责接收请求并将请求到的结果回应到客户端,并产生日志,如果配置了的话。IIS保存了本地文件的信息,

诸如那些文件的安全级别,如何将文件隔离到不同的应用程序中,哪个地址该映射到哪个应用程序,等等。

如今的IIS采用工作进程隔离模式,不同于以往的IIS隔离模式。工作进程隔离模式渗透到了IIS6及其以后版本的各个核心组件当中,

当以此模式运行时,我们才能将应用程序指派到不同的应用程序池当中。一个应用程序池中的每个应用程序共享相同的工作进程,

每一个工作进程都有一个可执行的工作进程实例,即我们常看到的w3wp.exe,因此,当一个应用程序池中的应用程序崩溃的时候,

就不会影响到其他池中的应用程序,World Wide Web Publishing Service服务和IIS Admin service服务能够继续运行,

http.sys能够正常的加载。工作进程是运行于用户模式(与内核模式相对应)下的一个应用程序,其作用包括处理请求返回静态页、

调用ISAPI扩展或过滤、运行CGI处理程序,它由WWW Service Administration 和 Monitoring来控制管理。

IIS通常默认以NetworkService角色的身份来运行,在win7下是IIS_IUSERS,此角色拥有站点访问的最低限度的权限。

经典模式与集成模式

前面多次提到经典模式和集成模式,但是一直没有进行深入的说明。

集成模式是IIS7以后才有的,在这以前所使用的都属于经典模式。经典模式仅支持本机代码,

如果需要支持托管代码,则需要安装Web服务扩展,这就是我们在Windows Server 2003上的IIS管理器中所看到的,

Web服务扩展中列出了ASP.NET v2.0等Web服务扩展。

常在Asp.net2.0和Asp.net4.0之间用aspnet_regiis.exe –iru命令切换的人印象应该很深刻。

不过托管模块的那套身份验证诸如windows身份验证,form身份验证就只有托管代码才能直接使用,

像.html及.xml等后缀名的文件是没法直接使用的,需要进一步的配置才行。原因很简单,

经典模式采用2种请求处理管道,一个管道用于本机代码 ISAPI 筛选器和扩展组件。另一个管道用于托管代码应用程序组件,如 ASP.NET。

但是集成模式不同,它没有Web服务扩展这一说,也仅仅使用一个请求处理管道。

它将Web服务扩展的运行时(如ASP.NET的运行时)集成到IIS里面来,随后将请求的处理分发到各个所配置的模块当中,

所以模块配置的灵活性成为了IIS7的最大亮点,从而使得它能够同时对本机模块和托管模块提供最直接的支持。

一个请求来了,不管它所请求的是何种类型的资源,都由IIS统一截获,如此一来,统一的身份验证就变得更为简单,

当然前提是你得知道IIS7的应用程序生命周期,开发自己的模块对响应的事件进行注册、捕获和处理。

由于这里仅说明部署上的一些细节问题,所以对开发方面的东西不会涉及,感兴趣的朋友可以打开MSDN对该方面的问题进行详细了解。

我想,那些懂得一些架构设计的人对IIS7的这种架构设计的好处会有更为深刻的体会。

处理程序映射

在IIS7中,不论使用哪种模式,都可能需要对“处理程序映射”进行配置。如下图:

双击该项,单击下图中相应的项进行配置。

例如,在我们的MapleTr4.0中,要处理.inc文件及用到服务器端指令#include的.htm和.html页面,需要作如下配置:

点击“添加模块映射”,弹出如下窗口,进行配置如下图所示。我们需要将所有的.inc及.htm和.html文件进行如下的映射配置。

关于IIS7的部署,写到这里,我想已经差不多了。通过我所讲述的部署过程及一些原理性的说明,

大家再举一反三,进行渗透式的理解,问题会变得更加简单。有道是:山穷水复疑无路,柳暗花明又一村,

万变不离其踪,IIS管理器中列出来的那么多项,配置来配置去,不过是在相关的配置文件中进行改动改动而已,只要你熟悉配置文件语法。

相关阅读 更多 +
排行榜 更多 +
幸存者的命运

幸存者的命运

飞行射击 下载
精英战区3d

精英战区3d

飞行射击 下载
货运猎人

货运猎人

飞行射击 下载