<-
Apache > HTTP 伺服器 > 文件 > 版本 2.4 > 模組

Apache 模組 mod_brotli

可用語言:  en  |  fr 

說明在內容傳送至用戶端前,透過 Brotli 壓縮內容
狀態擴充套件
模組識別碼brotli_module
原始檔mod_brotli.c
相容性於版本 2.4.26 和後續版本中使用。

摘要

mod_brotli 模組提供 BROTLI_COMPRESS 輸出篩選器,讓伺服器輸出在透過網路傳送至用戶端前,得以使用 brotli 壓縮格式進行壓縮。此模組使用於 https://github.com/google/brotli 所提供的 Brotli 函式庫。

Support Apache!

主題

指令

修正錯誤清單

請參閱

top

範例組態

壓縮與 TLS

當 TLS 連線含有壓縮資料時,一些網頁應用程式容易受到資訊揭露攻擊。有關更多資訊,請查看「BREACH」系列攻擊的詳細資料。

這是壓縮一般文字型內容類型的簡單組態。

僅壓縮少數類型

AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/xml text/css text/javascript application/javascript
top

啟用壓縮

壓縮與 TLS

當 TLS 連線含有壓縮資料時,一些網頁應用程式容易受到資訊揭露攻擊。有關更多資訊,請查看「BREACH」系列攻擊的詳細資料。

輸出壓縮

壓縮由 BROTLI_COMPRESS 篩選器 來實作。下列指令將針對放置於其容器中的文件啟用壓縮

SetOutputFilter BROTLI_COMPRESS
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-brotli

如果您想將壓縮限制於一般中特定 MIME 類型,則可以使用 AddOutputFilterByType 指令。以下為 Apache 文件僅針對 html 檔案啟用壓縮範例

<Directory "/your-server-root/manual">
    AddOutputFilterByType BROTLI_COMPRESS text/html
</Directory>

注意

BROTLI_COMPRESS 篩選器始終會套用在 PHP 或是 SSI 等資源篩選器後。且從來不會觸發內部子請求。

注意

有一個環境變數 no-brotli,經由 SetEnv 設定,它會停用特定要求的 brotli 壓縮,即便它受到用戶端支援。
top

處理代理伺服器

mod_brotli 模組會傳送一個 Vary: Accept-Encoding HTTP 回應標頭,以提醒代理伺服器,快取的回應應僅傳送給傳送適當的 Accept-Encoding 要求標頭的用戶端。這可避免將壓縮內容傳送給無法理解的用戶端。

如果您使用一些特殊的排除項(例如,視 User-Agent 標頭而定),您必須手動設定加入 Vary 標頭,以提醒代理伺服器有其他限制。例如,在一個典型的組態中,其中 BROTLI_COMPRESS 濾器的加入視 User-Agent 而定,您應加入

Header append Vary User-Agent

如果您的壓縮決定視要求標頭之外的其他資訊(例如,HTTP 版本),則您必須將 Vary 標頭設定為 *。這會避免相容性代理伺服器完全快取。

範例

Header set Vary *
top

提供預先壓縮的內容

由於 mod_brotli 會在每次提出要求時重新壓縮內容,因此可以透過預先壓縮內容,並指示 mod_brotli 在不重新壓縮它們的情況下提供它們,來獲得一些效能優勢。這可以使用類似下列的組態來達成

<IfModule mod_headers.c>
    # Serve brotli compressed CSS files if they exist
    # and the client accepts brotli.
    RewriteCond "%{HTTP:Accept-encoding}" "br"
    RewriteCond "%{REQUEST_FILENAME}\.br" "-s"
    RewriteRule "^(.*)\.css"              "$1\.css\.br" [QSA]

    # Serve brotli compressed JS files if they exist
    # and the client accepts brotli.
    RewriteCond "%{HTTP:Accept-encoding}" "br"
    RewriteCond "%{REQUEST_FILENAME}\.br" "-s"
    RewriteRule "^(.*)\.js"               "$1\.js\.br" [QSA]


    # Serve correct content types, and prevent double compression.
    RewriteRule "\.css\.br$" "-" [T=text/css,E=no-brotli:1]
    RewriteRule "\.js\.br$"  "-" [T=text/javascript,E=no-brotli:1]


    <FilesMatch "(\.js\.br|\.css\.br)$">
      # Serve correct encoding type.
      Header append Content-Encoding br

      # Force proxies to cache brotli &
      # non-brotli css/js files separately.
      Header append Vary Accept-Encoding
    </FilesMatch>
</IfModule>
top

BrotliAlterETag 指令

說明壓縮期間如何修改傳出 ETag 標頭
語法BrotliAlterETag AddSuffix|NoChange|Remove
預設值BrotliAlterETag AddSuffix
內容伺服器組態、虛擬主機
狀態擴充套件
模組mod_brotli

BrotliAlterETag 指令會指定回應被壓縮時應如何變更 ETag 標頭。

AddSuffix

將壓縮方法附加到 ETag 的結尾,導致壓縮和未壓縮的表示形式具有唯一的 ETag。在另一個動態壓縮模組 mod_deflate 中,這已成為 2.4.0 以來的預設值。此設定可避免向壓縮內容的條件請求提供「HTTP Not Modified」(304) 回應。

NoChange

不要變更壓縮回應的 ETag。在另一個動態壓縮模組 mod_deflate 中,這已成為 2.4.0 之前的預設值。此設定不符合 HTTP/1.1 屬性,即同一資源的所有表示形式都具有唯一的 ETag。

Remove

從壓縮回應移除 ETag 標頭。這可避免執行一些條件請求,但可避免前述選項的缺點。

top

BrotliCompressionMaxInputBlock 指令

說明最大輸入區塊大小
語法BrotliCompressionMaxInputBlock value
預設值(自動)
內容伺服器組態、虛擬主機
狀態擴充套件
模組mod_brotli

指令 BrotliCompressionMaxInputBlock 指定最大輸入區塊大小介於 16 至 24,但要注意的是,區塊大小越大,所需記憶體越多。

top

BrotliCompressionQuality 指令

說明壓縮品質
語法BrotliCompressionQuality value
預設值BrotliCompressionQuality 5
內容伺服器組態、虛擬主機
狀態擴充套件
模組mod_brotli

指令 BrotliCompressionQuality 指定壓縮品質(0 至 11 之間的值)。品質值越高,壓縮品質越好,但速度也越慢。

top

BrotliCompressionWindow 指令

說明Brotli 壓縮視窗大小滑動
語法BrotliCompressionWindow value
預設值BrotliCompressionWindow 18
內容伺服器組態、虛擬主機
狀態擴充套件
模組mod_brotli

指令 BrotliCompressionWindow 指定 brotli 壓縮視窗大小滑動(10 至 24 之間的值)。視窗大小越大,壓縮品質可能越好,但所需記憶體也越多。

top

BrotliFilterNote 指令

說明將壓縮比放置在備忘錄中以供記錄
語法BrotliFilterNote [type] notename
內容伺服器組態、虛擬主機
狀態擴充套件
模組mod_brotli

指令 BrotliFilterNote 指定應將壓縮比的備忘錄附加至請求中。備忘錄的名稱是為此指令指定的值。您可以將值加入 存取記錄檔 中,以統計用途使用該備忘錄。

範例

BrotliFilterNote ratio

LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' brotli
CustomLog "logs/brotli_log" brotli

如果您想從記錄檔中擷取更準確的值,可以使用 type 引數指定要作為備忘錄中記錄的資料類型。 type 可以是下列選項之一

Input
將過濾器輸入串流的位元組計數儲存在備忘錄中。
Output
將過濾器輸出串流的位元組計數儲存在備忘錄中。
Ratio
將壓縮比 (output/input * 100) 儲存在備忘錄中。如果省略 type 引數,則此為預設值。

因此,您可以用這種方式記錄

準確記錄

BrotliFilterNote Input instream
BrotliFilterNote Output outstream
BrotliFilterNote Ratio ratio

LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' brotli
CustomLog "logs/brotli_log" brotli

請參閱

可用語言:  en  |  fr 

top

註解

注意事項
這不是問答區。張貼於此的意見應以提供改善文件或伺服器的建議為主,如果這些意見已實作或被視為無效/離題,我們的管理員可能會移除這些意見。有關如何管理 Apache HTTP 伺服器的問題應引導至我們的 IRC 頻道,亦即 Libera.chat 上的 #httpd,或寄送至我們的 郵寄清單