先說一下背景,因為是自己租來的VPS管理代碼、文檔及跑一些自己用的一些服務程序,為了便宜又穩定就考慮租了台windows2003的vps,內存總共只1G,很捉襟見肘。
在Web服務這一塊,同一台裝了2003的服務器上,需要跑PHP及ASP.NET,IIS6上安裝了PHP後,加裝Rewrite組件,可以較正常的跑wordpress,但後來由於rewrite組件過期了,去網上找了各種版本的安裝,仍然無用,總是提示已過期。
於是只好考慮用用nginx做的反向代理,動態解析轉向到IIS6及Apache上,但這樣整體內存占用看起來有點大,於是停用了Apache,轉而用nginx加PHP-cgi.exe來跑wordpress,發現訪問速度似乎提升了一些,但是php進程動不動就自動退出,於是又寫個管理php-cgi.exe的守護進程。後來,nginx又不正常了,時不時出點小毛病,而php-cgi用守護進程只啟動一個進程,也時常出問題,如果啟動一堆的話,加上守護進程與php-cgi所占用的內存,還不如直接nginx轉apache算了。
總之,確定在windows下,想好好跑php,又要節省內存,真的不容易。
然後考慮到IIS7.5 Express可以在WIN2003上跑,不但能以fastcgi的方式支持php,還自帶Rewrite組件,只需簡單改改web.config的rule規則就可以了。
於是百度下載了IIS7.5 Express後,安裝,還需要對applicationHost.config進行配置,首先得找到這個文件在哪裡,如果能在"我的文檔"中IIS7Express目錄下找到,那就是它了,否則應該就是在IIS7 Express的安裝目錄下。
1、先修改:defaultDocument節,加入 <add value="index.php" />
<defaultDocument enabled="true">
<files>
<add value="Default.htm" />
<add value="Default.asp" />
<add value="index.htm" />
<add value="index.html" />
<add value="iisstart.htm" />
<add value="default.aspx" />
<add value="index.php" />
</files>
</defaultDocument>
2、找到fastcgi節。
<fastCgi>
<application fullPath="C:\php\php-cgi.exe" monitorChangesTo="php.ini" activityTimeout="600" requestTimeout="600" instanceMaxRequests="10000">
<environmentVariables>
<environmentVariable name="PHP_FCGI_MAX_REQUESTS" value="10000" />
<environmentVariable name="PHPRC" value="C:Program Files (x86)iis expressPHPv5.4" />
</environmentVariables>
</application>
</fastCgi>
3、找到handlles,加入
<add name="PHP_FastCGI" path="*.php" verb="GET,HEAD,POST" modules="FastCgiModule" scriptProcessor="C:\PHP\php-cgi.exe" resourceType="Either" />
尤其要注意的一是,這一句最好加在最前面,也就是在<handlles>下面的第一句,避免被其它Handle搶先處理了。
以上配置中,C:\php\php-cgi.exe 的部分替換成自己的php文件夾中的php-cgi.exe的位置。
4、在<site>配置節下,直接修改站點信息,或直接用appcmd.exe add site來添加站點。
5、找到諸如wordpress的安裝文件夾,創建一個web.config文件,在配置節下,添加Gzip壓縮規則。
<system.webServer> <urlCompression doStaticCompression="true" doDynamicCompression="true" /> </system.webServer>
6、同樣在web.config中,Wordpress的rewrite完整的web.config文件內容如下:
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="wordpress" patternSyntax="Wildcard">
<match url="*" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
<system.webServer>
<urlCompression doStaticCompression="true" doDynamicCompression="true" />
</system.webServer>
</configuration>
這樣就完全配置完畢了,然後在IIS7 Express目錄下,找到IISExpress.exe,直接雙擊運行,或者用命令行來執行指定加載哪個站點.
iisexpress.exe /site:'站點名稱1" iisexpress.exe /site:'站點名稱2"
訪問一下,就會發現訪問速度比在windows下使用apache要快得多,而且少跑一個nginx,內存占用整體上也少了很多。