2008年10月12日星期日

关于在IIS6.0创建webSites的最佳做法(Best practices for creating websites in IIS6.0)

每一次我创建一个IIS网站,我总要做一些步骤,我考虑这些步骤是为了网站更好的性能,更加易于维护,以及具有伸缩性。下面是我做的步骤:
1. 对每一个web应用程序创建一个可分离的应用程序池(application pool)
我总是创建 一个分离的application pool为每一个应用程序,因为这样我可以为应该用程序的回收选择不同的计划时间。一些通信压力大的websites有一个长一些的回收计划时间,一些通信小的webSites能一个短点的回收计划时间。此外,而且我能够为这些app pool选择不同的进程数量。这些使用web garden模式的应用程序得益于多个进程,另外在进程中使用了session以及memory cache的进程则有一个单一的进程服务于它的app pool中。所以将所有的应用程放在DefaultAppPool 下不能给我一个弹性去控制每一个网站。
你创建许多的app pool,那么你的应用程序就有更多可用的ASP.NET线程。每个w3wp.exe都有它自己的线程池(thread pool)。因此,如果一些应该程序被特定的w3wp.exe阻塞着,其它的应用程充也能够开开心心的运行在他们分离下app pool的w3wp.exe中。每一个app pool都 管理着他们自己的w3wp.exe实例。所以,我的首要规则是:我总是创建一个新的app pool为一个新的web应用程序并且以其网站domain命名,或者更加有意义的名字。例如,你创建一个网站叫alzabir.com,则可以将app pool命令为alzabir.com 。
2.禁止DefaultAppPool,以免你将网站加到DefaultAppPool中去而犯错误。
3.设置IIS的一些日志属性。
4.设置IIS的错误页(404),以及打一个缓存cache 。
5.设置IIS6.0的Gzip compression.
6.明确设置你的网站的asp.net的版本。
具体操作如下所示:
如下二图所示:首先你创建一个新的app pool,然后你创建一个新的webSite或虚拟目录。打开Properties -> Home Directory tab->Select the new app pool.注意将DefaultApplicationPool禁止。

image
image

接下来,你应该映射正确的host headers到你的网站中去。怎么去做呢?打开WebSite并且点击“Advanced”按钮。加上两个映射地址domain.com和www.domain.com 。注意,许多时间,人们总忘记去映射domain.com。然后许多访问者都跳过类型www的前缀,结果得到页面无法访问的情况。操作如下图所示:

image

再接下来配置一些日志信息:

image

这样很方便得可以去分析网站。如果你想去测量你的宽带消耗对于特定的网站,你应该去勾选Bytes Sent ;如果你想去测量不同页面的执行时间并且找出运行慢的网页,你应该去勾选 Time Taken;如果你想去测量特殊的访问者和回访者,你应该去勾选Cookie。如果你想去知道进入你网站的前一个网站地址或者发给你的一些搜索引擎地址,你应该去勾选Referer。接下来你就可以使用分析式具去分析了,例如,使用open source AWStats.
但是,如是你使用Google Analytics或者其它一些分析工具,你应该将它们关闭,特别是Cookie和Referer,因为它们在日志中占有非常多的空间。如果你使用ASP.NET Forms Authentication并且是一个中等通信规模的网站,则来自于每一个请求的世大的cookie每一周将产生GB(gigabytes)日志数量的数据。
image

然后,我加了一个Default.aspx作为一个默认的内容页。当用户访问网站没有任何.aspx页同名字的时候,便如alzbir.com,他们得到一个default.aspx页面(如上图所示)。

image

再接一来,我要做以下事情(如上图所示):
1) 打开内容过期时间。这将使静态文件,例如images,javascripts,css文件不用从服务器上下载一遍又一遍。这一个设置将明显的提高你的网站性能。
2) 移除X-Powered-by:ASP.NET header。你实在是不需要它,除非你想附加一个Visual Studio Remote Debugger到你的IIS,否则,它将在每一个response中发送21bytes到你的客户端。
3) 加上一个"From" header并且设置它的服务器名称。我做这一步在每一个webserver,并指定不同的名字。它很清楚的可以看到来自那一个的服务品的requests正在被工作。当你想去机检测负载平衡的时候,它很楚的可以知道一个指定的服务器是否正在发送requests .

image

我设置一个404 控制一些aspx,这样我能显示一个友好的错误信息。但是另外一个原因是去使用这个客户端的映射来实现可扩展性的URL。具体请看这篇文章

image

然后确定你的ASP。NET2.0,3.0和3.5的网站设置ASP.NET2.0。
最后,我重复的提醒你必须去打开IIS6.0 GZIP compressionThis turns on the Volkswagen V8 engine that is built into IIS to make your site screaming fast

没有评论: