IIS 配置 MIME类型 
2011-05-11 15:40:53|  分类: 技术心得标签:程序池  iis  进程  mime  web  |字号大中小 订阅
 
配置IIS
通常情况下对于IIS本身我们需要做的配置不多,主要集中在以下几个方面:
配置IIS应用程序隔离模式;
配置HTTP压缩;
配置MIME类型;
配置Web服务扩展;
配置应用程序池。

配置IIS的应用程序隔离模式
我们在IIS使用指南之一 :IIS 6 新特性中介绍过,默认情况下IIS 6工作在工作进程隔离模式下,如果你的Web应用程序不能兼容此模式,那么你需要将IIS 6配置为工作在IIS 5 隔离模式下,配置过程如下:
点击开始,指向控制面板,然后选择Internet信息服务(IIS)管理器,在弹出的Internet信息服务(IIS)管理器上右击网站文件夹,选择属性,然后在弹出的网站属性对话框上点击服务标签,在隔离模式下勾选以IIS 5.0隔离模式运行WWW服务即可,需要重启整个IIS服务。
 
 
配置HTTP压缩
如上图中的配置,你可以看到IIS 6支持HTTP压缩。HTTP压缩是一种牺牲CPU性能来降低带宽消耗的功能,如果IIS中启用了HTTP压缩并且客户端浏览器支持HTTP压缩,那么IIS在传送文件之前,会对数据进行压缩后再进行传送。它的工作原理是这样的:
IIS接收到客户端浏览器发送的请求时,将检查客户端浏览器是否支持HTTP压缩;然后IIS检查客户端浏览器请求的文件的扩展名,以确定请求的文件为静态文件或包含动态内容。
如果为静态文件,IIS将查看是否已将此文件以压缩格式存储在临时目录中。如果文件没有以压缩格式存储,IIS会将未压缩的文件发送至发起请求的客户端浏览器,并将此文件进行压缩后存储在临时目录中;如果文件已经以压缩格式存储在临时目录中,IIS会将压缩过的文件发送给浏览器。在客户端浏览器首次请求之前,IIS不会压缩任何文件;在客户端浏览器首次请求某个文件之前,此文件不会被压缩;并且在客户端浏览器首次请求某个文件时,它获得的文件并未经过压缩。

 
如果文件包含动态内容(应用程序文件),IIS将首先针对动态内容生成响应,然后对生成的响应进行压缩,并将压缩后的响应发送至客户端浏览器;IIS不对此响应进行存储。

 
压缩静态文件所消耗的CPU性能较少,并且通常只需要压缩一次,然后就保存在缓存的临时目录中;压缩动态内容的代价要高一些,因为它们并不存储在临时目录中,并且每次请求时都必须重新生成。推荐你只压缩静态文件,而不压缩应用程序文件。当然,如果你认为与CPU性能消耗相比你更在乎带宽的利用率,那么也可以压缩应用程序文件;微软建议在CPU利用率已经达到80%以上时,不对应用程序文件进行压缩。
当配置HTTP压缩时,根据你的需要选择压缩静态文件和压缩应用程序文件,如果要压缩应用程序文件,则必需勾选压缩静态文件,然后输入压缩后的内容的缓存临时目录,默认为%windir%\IIS Temporary Compressed Files,然后输入所存储的压缩内容的最大容量即可,默认为不受限制。
 
从安全性上考虑,IIS 6中只是定义了常见的MIME类型(文件扩展名),而没有和IIS 5
样包含通配符MIME映射。这样当客户端浏览器从IIS 6 Web服务器上请求某个文件时,如果该文件的扩展名并没有在IISMIME类型中进行定义,IIS 会返回404错误-文件或目录未到。对于使用Access数据库的站点,为了防止别人下载Access数据库,有些文章中介绍了将Access数据库改名为.asp来防止下载的方法,这并不安全,最好的办法就是将Access数据库的扩展名修改为MIME类型中未定义的扩展名,这样别人就无法访问此数据库。
当然,有时你需要添加MIME类型。你可以在IIS全局、网站、单个网站这三个级别上添加MIME类型,默认的MIME类型定义在IIS全局属性中,而网站属性中定义的MIME类型可以覆盖所有网站中的MIME类型定义,在单个网站上定义的MIME类型只会影响此站点。
IIS全局上添加MIME类型的过程如下:
IIS管理控制台中右击服务器名,然后选择属性;
在弹出的计算机属性对话框上点击MIME类型按钮;
MIME类型对话框中,你可以创建、修改、删除MIME类型,在此我为ISO文件创建一个MIME类型,点击新建按钮;
在扩展名栏中,键入对应的文件扩展名.iso,如果你不输入“.”(例如只输入ISO),那么IIS会自动为你添加;如果你想添加通配符MIME映射,即允许访问任何没有MIME类型定义的文件,则在扩展名栏输入“*”,不过不推荐使用这种方式。然后在MIME类型栏,输入application/octet-stream,最后点依次击确定即可。
 
而在网站或单个网站上添加MIME类型定义则是右击网站或单个网站,然后选择属性,点击HTTP头标签中的MIME类型按钮即可进行配置。
 
 
配置Web服务扩展
Web服务扩展是IIS中用于处理动态内容请求的扩展组件,在IIS中支持以下两种方式的Web服务扩展:
ISAPIInternet Server Application Programming Interface)扩展;
CGICommon Gateway Interface)应用程序;
它们之间的工作原理基本相同,主要是实现机制不同。ISAPICGI之间最大的区别在于ISAPI扩展基本以动态链接库的形式存在,而CGI以可执行程序形式存在;ISAPI方式运行的Web服务扩展可以在被用户请求激活后长驻内存,从而减少加载DLL的时间,因此具有比CGI方式更高的效率。
从安全性上考虑,在安装IIS时,默认情况下会安装以下四个Web服务扩展但是并不启用,因此只能支持静态内容的访问:
Active Server Pages
Internet数据连接器
WebDav
在服务器端的包含文件
你可以根据你的需要添加或删除自定义的Web服务扩展,而对于IIS内建的Web服务扩展则只能禁用或启用。
对于这些内置的Web服务扩展,IIS已经为Web站点配置好了应用程序映射,你只需要启用这些Web服务扩展,就可以在Web站点中启用对相应动态内容的访问。
如果要启用某个系统自带的Web服务扩展,则在大文件发送IIS管理控制台中点击Web服务扩展文件夹,然后在右侧窗口中点击对应的Web服务扩展,点击允许即可,例如要启用对ASP页面的支持,则启用Active Server Pages即可;
 
如果要添加自定义的Web服务扩展,除了需要在Web服务扩展文件夹中进行添加外,还需要在Web站点中添加应用程序映射,我将以后专文进行描述。
 
配置应用程序池
IIS 6的核心在于工作进程隔离模式,而应用程序池则是定义工作进程如何进行工作,因此,可以说应用程序池是整个IIS 6的核心。
IIS 5中只能使用单个应用程序池不同,工作在工作进程隔离模式的IIS 6可以创建多个应用程序池,不同的应用程序池之间是完全隔离的,某个应用程序池停止服务时不会影响到其他应用程序池。
在使用应用程序池之前,你应该确定你所需要的应用程序池数量。可能有很多朋友会认为,既然不同的应用程序池之间是完全隔离的,那么我只需要为每个Web站点创建一个应
用程序池就可以了。这个办法在IIS服务器上具有较少的Web站点数量时可以使用,但是如果IIS服务器上具有很多Web站点数量,那么这个办法就不适用了,因为不同的应用程序池在被访问时都会创建各自的工作进程,当大量的工作进程并发工作时会消耗大量的系统资源和CPU利用率,反而会降低服务器性能。你应该根据Web站点的重要性、隔离性、所运行代码的安全性和稳定性等来对IIS服务器上所具有的Web站点进行划分,然后根据情况来决定所需要的应用程序池数量。对于那些非常重要的Web站点、需要单独隔离的Web站点、所运行代码稳定性和安全性并不可靠的Web站点配置为使用各自独立的应用程序池,而将其他普通的Web站点配置为使用一个公共的应用程序池。
默认情况下,在安装IIS时会创建一个默认网站并创建一个名为DefaultAppPool的应用程序池为其使用;默认配置下的应用程序池已经可以很好的进行工作,建议你只有在特别需要时才对应用程序池进行配置。
 
配置应用程序池属性
IIS管理控制台中展开应用程序池文件夹,然后右击对应的应用程序池,点击属性,你可以在应用程序池的属性中进行以下配置:
回收
在回收标签,你可以设置工作进程的回收方式:
回收工作进程(分钟):在工作进程运行多少分钟后回收工作进程,默认启用,并且设置为1740分钟(29小时);

 
回收工作进程(请求数目):在工作进程处理多少 HTTP请求后终止此工作进程,默认禁用,如果启用则默认值为35000

 
在下列时间回收工作进程:在指定的时间回收工作进程,默认禁用;如需启用,勾选后点击添加按钮添加回收的时间即可,使用24小时制定义回收的时间;

 
消耗太多内存时回收工作进程:
最大虚拟内存(兆):当工作进程使用的虚拟内存达到设置的值时回收工作进程,默认禁用,如果启用则默认值为500 M;建议设置为不超过虚拟内存总数的70%;

 
最大使用的内存(兆):当工作进程使用的物理内存达到设置的值时回收工作进程,默认禁用,如果启用则默认值为192 M;建议设置为不超过物理内存总数的60%;

 
另外需要注意的是,应用程序池具有以下两种工作进程回收方式,不过这两种回收方式均不会造成Web服务的中断:
默认情况下,应用程序池使用重叠回收方式。在这种方式下,当应用程序池要关闭某个工作进程时,会先创建一个工作进程,直到新的工作进程成功创建后才关闭旧的工作进程;


 
应用程序池也可以先关闭旧的工作进程,然后再创建新的工作进程。

 
如果Web应用程序不支持多实例运行,那么你必须配置应用程序池禁止使用重叠回收方式。此配置无法在IIS管理控制台中进行修改,只能通过在l中修改对应应用程序池的DisallowOverlappingRotation metabase属性为true进行。