游客发表
2009年夏天,我在一台Windows Server 2008的机器上第一次跑通IIS7,前后折腾了快三个小时。不是配置有多复杂,是那个全新的管理界面让我完全找不着北——IIS6的标签页明明用得好好的,微软偏要换成这种左右分栏的布局。后来才知道,这个叫“管理器”的东西,是IIS历史上改动最大的一次。
很多站长对IIS的印象停留在“只能跑ASP”的阶段。IIS7出来之后,这个认知其实已经过时了。模块化架构是IIS7最核心的变化,微软把原来塞在一个进程里的功能拆成了四十多个独立模块,你想用哪个就装哪个。这个设计思路和Apache的DSO模式有点像,但集成度更高。我见过一个只跑静态HTML的站点,关掉几乎所有模块后,内存占用降到十几MB,响应速度明显上了一个台阶。
FastCGI的支持是另一个转折点。IIS6时代跑PHP得靠ISAPI,稳定性一直是个问题,PHP进程崩了经常把整个w3wp也带下去。IIS7内置了FastCGI模块,PHP通过php-cgi.exe独立运行,一个进程挂了不影响其他站点。Windows主机上跑WordPress从此变得可行,虽然性能还是比不上Linux原生环境,但至少不会隔三差五地503了。
《IIS7站长之家》这个名字,在当年的站长圈子里确实有人用过。我印象中是一个个人博客,博主叫“老赵”,专门写IIS7的配置教程。他的文章有个特点,从来不贴完整的web.config,都是针对具体问题给代码片段。比如URL重写规则怎么写、伪静态怎么配、404页面怎么自定义,每篇解决一个小问题。这种写法在现在看来很常规,但在2010年前后,大部分教程还停留在“第一步打开控制面板”的流水账阶段,老赵的博客算是清流。
说到URL重写,IIS7的URL Rewrite模块是后来单独发布的,不在初始安装包里。这个模块的规则语法和Apache的mod_rewrite差别很大,从Linux迁过来的站长得重新学。我见过有人直接把.htaccess转成web.config然后发现完全不生效,因为两者的匹配逻辑根本不同。URL Rewrite用的是XML配置,规则按顺序执行,支持正则但语法是.NET那套。刚开始觉得别扭,用熟了反而觉得比.htaccess清晰,至少不用担心目录级的配置覆盖问题。
应用程序池的隔离机制值得单独提一下。IIS7允许每个站点跑在独立的应用程序池里,用不同的身份运行。这个功能在共享主机环境里特别实用,一个站点被入侵不会波及其他站点。但默认的ApplicationPoolIdentity权限设置有时候太严,跑PHP的时候经常遇到文件读写权限报错。解决办法倒不复杂,给IIS_IUSRS组加个写权限就行,但新手往往卡在这一步。
现在回头看,IIS7算是微软在Web服务器领域的一次认真转型。它不再是一个封闭的黑盒,而是提供了足够的扩展点和配置粒度。虽然Windows服务器的授权费用摆在那里,但在企业内网和ASP.NET生态里,IIS7依然是首选。那些年折腾IIS7的经历,对很多站长来说,大概和现在折腾Nginx配置差不多——踩坑、查文档、骂两句、然后继续。
友情链接