2017-02-11

為 IIS 8.5 啟用 Brotli 網頁壓縮技術

前一篇我小談了 Brotli 網頁壓縮的看法,現在當然就只要試玩啦…

本篇以 Windows server 2012 R2 + IIS 8.5 的環境來測試,所以,2012 R2 怎麼安裝、 IIS 8.5 怎麼安裝的我就不講了…網路上就有教學,但 IIS 8.5 在安裝的時候要留意,記得要安裝「靜態、動態網頁資料壓縮的功能」,不然到時沒用途不要怪我…

事前準備:

  1. 環境建置:Windows server 2012 R2 + IIS 8.5
  2. IIS Brotli 1.1.1 32/64 bit dll (網址)(2017/02/11 查看時還是 1.1.1),載好後就解壓至你設定好的資料夾存放,假設我放的是在 C:\BrotliForIIS\brotli\1.1.1\

過程說明: 
  1. 啟用 https - 點選目標站台後,在 動作/編輯站台/繫結… 中設定
  2. 設定 IIS 應用程式集區 - 在 應用程式集區/DefaultAppPool/滑鼠右鍵/進階設定…(看你的 iis 網頁中有沒有會用到 32bit 的應用程式,因為我有用 jmail 什麼的,所以我會啟用,啟用 32位元 後,iisbrotli 只能用 32位元的版本,用錯了會出現 500 錯誤,切記;另外,這邊要用的應用程式集區可不一定只是 DefaultAppPool ,主要是要看你要啟用 brotli 壓縮的站台是哪一個,這個站台你指定的 apppool 是哪一個,我只有一個站台,只用 DefaultAppPool 而已)
  3. 把 iisbrotli 加入 IIS 的 httpcompress 中 - 雙擊 global(admin)/管理/設定編輯器

    區段選擇到 system.webServer/httpCompression

    點「集合」,選 (Count=x) 旁邊的「…」

    新增 scheme, name=br, dll=C:\BrotliForIIS\brotli\1.1.1\iisbrotli32.dll, doDynamicCompression=True, doStaticCompression=True, dynamicCompressionLevel=10, staticCompressionLevel=10 (這邊請留意要與在設定 AppPool 時一樣,如果你有啟用支援32位元的應用程式,那這邊你只能使用 iisbrotli32.dll ,如果你用 iisbrotli64.dll ,開網頁會出現 500 錯誤,反之也是)

    關閉上述集合視窗,回到區段,設定 staticTypes (這最見人見志啦,基本上預設值其實我覺得就夠了…text/* 已經包括網頁與 css 了,如果還有想多增加,我覺得可以增加網頁字型,現在因為 html5 的興起還蠻常用的,我個人覺得 image/* 不需要,因為你在做網頁時所用的圖片理論上你自己應該都重製過,已經重製過的圖片再靠 webCompression 其實效用不大,反而徒增 cpu 壓力;若你沒重製,我建議你自己再重製,而不要交給網頁壓縮技術,原因一樣,浪費 cpu 資源幹嘛,現在一堆工具和線上網站都有可以幫你壓縮且幾乎無損品質的功能…最多我覺得 image/x-icon 可以設定)
  4. 將 iisbrotli32/64.dll 加入 IIS 原生模組中 - 雙擊 global or 特定站台/IIS/模組

    在模組視窗,點右邊的「設定原生模組」

    在設定原生模組視窗,點右邊的「登錄」

    分別建立 Brotli 32 和 64 的模組,名稱自訂,但路徑就是選擇 iisbrotli32.dll 和 iisbrotli64.dll 的地方(有覺得為什麼兩個都要建立嗎,很簡單,因為這邊建立64位元的模組時,並不會因為設定AppPool有啟用支援32位元的關係而出錯,反之亦然,所以先建立以備以後不再使用32位元時,只要動httpCompression那邊一個地方就好)


    回到設定原生模組視窗,將剛剛建立的 Brotli 32/64 的兩個模組打勾,並按下確定,讓這兩個啟用(啟用後發現這兩個會出現在模組的列表中,而消失在設定原生模組的視窗中;本步驟我個人覺得蠻重要的,也許有人發現,其只做到前一個在設定 httpCompression 集合那邊,重啟 IIS 後,其實在開啟 https 時就會在 Response/Request header 發現 Content-encoding 和 accept-encoding 都有 br 也就是 Brotli 壓縮的出現,但我自己在使用時有發現,如果原生模組不設定,iis會稍稍的卡住,感覺上有點像iis去呼叫外部程式來壓縮時因為等候壓縮完畢而 idle 的關係,而且如果壓縮後的大小也沒有啟用原生模組後來的有效率;也許我是遇到例外,但其實建立原生模組也不影響,何不避免這個問題)
到此五步,都設定完後,記得要重新啟動 iis 這個服務,只要沒提示錯誤,就可以試著看網頁來看看,但要記得,brotli 只支援 https ,所以要看網頁記得要看 https 下的網頁,另外,你用來看網頁的瀏覽器,要用比較新的…因為太舊的瀏覽器並不支援 brotli 技術,至於要什麼版本,可以看這邊

4 則留言:

Vinix 提到...

您所提到的模組已經變成付費制了。微軟自己有提供免費的版本:
https://www.iis.net/downloads/microsoft/iis-compression

官方說明:
https://docs.microsoft.com/en-us/iis/extensions/iis-compression/iis-compression-overview

就我自己的測試,64位元OS直接安裝64位元的就好,依說明安裝完畢後,因為dynamicCompressionLevel預設是0,只會使用gzip,我改為7後就會自動使用br。

安裝程式並沒有設定原生模組,我也沒有另外設定。

死狐狸 提到...

原來如此…感謝告知

不過 level 要調到 7 左右才會變成有 br 也蠻意外的…

Vinix 提到...

Sorry,進一步測試的結果,dynamicCompressionLevel與是否使用br無關。

安裝後,重開w3svc即可生效。

死狐狸 提到...

瞭解,感謝分享測試結果…