支持高併發的IIS Web服務器經常使用設置

適用的IIS版本:IIS 7.0, IIS 7.5, IIS 8.0html

適用的Windows版本:Windows Server 2008, Windows Server 2008 R2, Windows Server 2012web

一、應用程序池(Application Pool)的設置: windows

  • General->Queue Length設置爲65535(隊列長度所支持的最大值)
  • Process Model->Idle Time-out設置爲0(不讓應用程序池由於沒有請求而回收)
  • Recycling->Regular Time Interval設置爲0(禁用應用程序池按期自動回收)

二、.Net Framework相關設置瀏覽器

a) 在machine.config中將緩存

<processModel autoConfig="true" />

改成服務器

<processModel enable="true" requestQueueLimit="100000"/>

(保存後該設置當即生效)併發

b) 打開C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\Browsers \Default.browser,找到<defaultBrowser id="Wml" parentID="Default" >,註釋<capabilities>部分,而後運行在命令行中運行aspnet_regbrowsers -i。app

複製代碼
<defaultBrowser id="Wml" parentID="Default" > <identification> <header name="Accept" match="text/vnd\.wap\.wml|text/hdml" /> <header name="Accept" nonMatch="application/xhtml\+xml; profile|application/vnd\.wap\.xhtml\+xml" /> </identification> <!-- <capabilities> <capability name="preferredRenderingMime" value="text/vnd.wap.wml" /> <capability name="preferredRenderingType" value="wml11" /> </capabilities> --> </defaultBrowser>
複製代碼

以解決text/vnd.wap.wml問題。負載均衡

三、IIS的applicationHost.config設置ide

設置命令:

c:\windows\system32\inetsrv\appcmd.exe set config /section:serverRuntime /appConcurrentRequestLimit:100000

設置結果:

<serverRuntime appConcurrentRequestLimit="100000" />

(保存後該設置當即生效)

四、http.sys的設置

註冊表設置命令1(將最大鏈接數設置爲10萬):

reg add HKLM\System\CurrentControlSet\Services\HTTP\Parameters /v MaxConnections /t REG_DWORD /d 100000

註冊表設置命令2(解決Bad Request - Request Too Long問題):

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters /v MaxFieldLength /t REG_DWORD /d 32768
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters /v MaxRequestBytes /t REG_DWORD /d 32768

(須要在命令行運行 net stop http  & net start http & iisreset 使設置生效)

五、針對負載均衡場景的設置

在Url Rewrite Module中增長以下的規則:

複製代碼
<rewrite> <allowedServerVariables> <add name="REMOTE_ADDR" /> </allowedServerVariables> <globalRules> <rule name="HTTP_X_Forwarded_For-to-REMOTE_ADDR" enabled="true"> <match url=".*" /> <serverVariables> <set name="REMOTE_ADDR" value="{HTTP_X_Forwarded_For}" /> </serverVariables> <action type="None" /> <conditions> <add input="{HTTP_X_Forwarded_For}" pattern="^$" negate="true" /> </conditions> </rule> </globalRules> </rewrite>
複製代碼

相關博文:遷入阿里雲後遇到的Request.UserHostAddress記錄IP地址問題

注意事項:添加該URL重寫規則會形成IIS內核模式緩存不工做,詳見微軟的坑:Url重寫居然會引發IIS內核模式緩存不工做

六、 設置Cache-Control爲public

在web.config中添加以下配置: 

複製代碼
<configuration> <system.webServer> <staticContent> <clientCache cacheControlCustom="public" /> </staticContent> </system.webServer> </configuration>
複製代碼

 

  1. 打開IIS Manager。
  2. 單擊服務器。而後,在右側窗口中雙擊HTTP Reponse Headers。
  3. 單擊Add。在Name字段中,輸入Cache-Control,在Value字段中,輸入public。
  4. 移除X-Powered-By頭。由於瀏覽器或代理都不使用它,因此它只會增長開銷。
  5. 點擊Set Common Headers。
  6. 設置Expire Web Content。選擇After,指定365天。

    IIS經過Cache-Control應答頭告訴瀏覽器和代理是否緩存能夠圖片。它的可能值包括:

    Cache-Control value Description
    no-cache Prevents caching in the browser or proxies.
    private Allows caching in the browser, but not in proxies. This is the default value.
    public Allowing caching in both the browser and in proxies.

    除了這個, Cache-Control: max-age頭指定瀏覽器緩存圖片的最大時間。HTTP 1.1規範建議服務器不要指定這個值超過1年。

    若是圖片在緩存中,訪問者刷新頁面(Ctrl + F5),或者圖片的max-age過時,瀏覽器會發送一個條件請求。這個請求有一個If-Modified-Since請求頭指出緩存圖片的接收時間。若是沒有新版本,服務器答覆304「Not Modified」。若是有新版本,服務器發送200應答,應答中包括新圖片

    阻止條件請求

    任何請求都是昂貴的,即便答應是短小的,例如304應答。最好設置max-age爲一年。

    若是圖片修改了,怎麼辦?訪問者要看一年舊圖片?爲了防止這種狀況,能夠在圖片名中加入版本號,例如:myimage_v2.jpg。當圖片更新時,圖片改名myimage_v3.jpg。瀏覽器在緩存中不能找到新圖片,就會從服務器上從新獲取。

    手工更新圖片名稱會須要很大的工做。使用本文後面介紹的Image control adapter。

    Expires頭

    Expires是在HTTP1.0中定義的。Cache-Control頭始終比Expires頭優先級高。如今,沒有理由再使用Expires。

 

七、ASP.NET線程設置

在machine.config的<processModel>中添加以下設置: 

<processModel enable="true" maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50" minIoThreads="50"/>

相關博文:雲計算之路-阿里雲上:從ASP.NET線程角度對「黑色30秒」問題的全新分析

 

相關連接:

讓Windows Server 2008 + IIS 7+ ASP.NET 支持10萬併發請求

相關文章
相關標籤/搜索