先說一下背景,因為是自己租來的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,內存占用整體上也少了很多。