nginx gzip duplicate MIME type “text/html”

指令

  • [#gzip gzip]
  • [#gzip_buffers gzip_buffers]
  • [#gzip_comp_level gzip_comp_level ]
  • [#gzip_min_length gzip_min_length]
  • [#gzip_http_version gzip_http_version]
  • [#gzip_proxied gzip_proxied]
  • [#gzip_types gzip_types]

 

把nginx升級到最新以後,發現用原來的配置啓動的時候會提示:
Starting nginx: [warn]: duplicate MIME type “text/html” in /usr/local/nginx/conf/nginx.conf:23

解決辦法:去掉下面一行中的“text/html”。

gzip_types  text/plain text/html  text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;

原因:text/html根本就不需要寫的,gzip默認就會壓縮它的,只不過以前的nginx版本不提示這個警告而已,新版本的會出這個警告。


gzip on;
gzip_static on; # Only use this if you compiled it yourself -or- with this module
gzip_proxied any;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
gzip_http_version 1.1;
gzip_min_length 10;
gzip_comp_level 9;
# text/css application/x-javascript and text/javascript are really your choice...
gzip_types text/plain application/xhtml+xml text/xml application/xml application/xml+rss;

最近在開發一個項目,開發環境爲 win + apache & linux + nginx,開發過程中在IE 6,7,8,ff下測試均正確無誤,但在測試部的服務器下竟然所有帶iframe的網頁都無法顯示,有點像404,但是很奇怪單獨打開頁面有時可以正常顯 示有時不可以,而且在IE7,8和ff下不會出現這種,很鬱悶..
         後來查看返回數據瀏覽器盡然接收到了數據但就是無法顯示,仔細對比header頭髮現開發環境中沒有使用動態gzip壓縮,而測試環境中使用了動態 gzip壓縮,後來打開開發環境nginx服務器的gzip壓縮,重現了IE6無法顯示頁面的情況,在網上搜索了下出現這種情況大多數爲引入js文件的時 候會出現,總結了下對於頁面中引入外部資源的都有可能出現這種情況…嚴重鄙視IE…
Nginx下遇到IE6關閉gizp壓縮只需要加: gzip_disable ”MSIE [1-6] \.”;


gzip

語法: gzip on|off

默認值: gzip off

作用域: http, server, location, if (x) location

開啓或者關閉gzip模塊

 

 

gzip_buffers

語法: gzip_buffers number size

默認值: gzip_buffers 4 4k/8k

作用域: http, server, location


設置系統獲取幾個單位的緩存用於存儲gzip的壓縮結果數據流。例如 4 4k 代表以4k爲單位,按照原始數據大小以4k爲單位的4倍申請內存。 4 8k 代表以8k爲單位,按照原始數據大小以8k爲單位的4倍申請內存。

如果沒有設置,默認值是申請跟原始數據相同大小的內存空間去存儲gzip壓縮結果。

 

 

gzip_comp_level

語法: gzip_comp_level 1..9

默認值: gzip_comp_level 1

作用域: http, server, location

gzip壓縮比,1 壓縮比最小處理速度最快,9 壓縮比最大但處理最慢(傳輸快但比較消耗cpu)。

 

gzip_min_length

語法: gzip_min_length length

默認值: gzip_min_length 0

作用域: http, server, location


設置允許壓縮的頁面最小字節數,頁面字節數從header頭中的Content-Length中進行獲取。

默認值是0,不管頁面多大都壓縮。

建議設置成大於1k的字節數,小於1k可能會越壓越大。即: gzip_min_length 1024

 

 

gzip_http_version

語法: gzip_http_version 1.0|1.1

默認值: gzip_http_version 1.1

作用域: http, server, location

識別http的協議版本。由於早期的一些瀏覽器或者http客戶端,可能不支持gzip自解壓,用戶就會看到亂碼,所以做一些判斷還是有必要的。 注:21世紀都來了,現在除了類似於百度的蜘蛛之類的東西不支持自解壓,99.99%的瀏覽器基本上都支持gzip解壓了,所以可以不用設這個值,保持系 統默認即可。

 

 

gzip_proxied

語法: gzip_proxied [off|expired|no-cache|no-store|private|no_last_modified|no_etag|auth|any] ...

默認值: gzip_proxied off

作用域: http, server, location

Nginx作爲反向代理的時候啓用,開啓或者關閉後端服務器返回的結果,匹配的前提是後端服務器必須要返回包含"Via"的 header頭。

  • off - 關閉所有的代理結果數據的壓縮
  • expired - 啓用壓縮,如果header頭中包含 "Expires" 頭信息
  • no-cache - 啓用壓縮,如果header頭中包含 "Cache-Control:no-cache" 頭信息
  • no-store - 啓用壓縮,如果header頭中包含 "Cache-Control:no-store" 頭信息
  • private - 啓用壓縮,如果header頭中包含 "Cache-Control:private" 頭信息
  • no_last_modified - 啓用壓縮,如果header頭中不包含 "Last-Modified" 頭信息
  • no_etag - 啓用壓縮 ,如果header頭中不包含 "ETag" 頭信息
  • auth - 啓用壓縮 , 如果header頭中包含 "Authorization" 頭信息
  • any - 無條件啓用壓縮

 

 

gzip_types

語法: gzip_types mime-type [mime-type ...]

默認值: gzip_types text/html

作用域: http, server, location

匹配MIME類型進行壓縮,(無論是否指定)"text/html"類型總是會被壓縮的。


注意:如果作爲http server來使用,主配置文件中要包含文件類型配置文件

http
{
 include       conf/mime.types;
 ......
}


如果你希望壓縮常規的文件類型,可以寫成這個樣子

http 
{
: include       conf/mime.types;

: gzip on;
: gzip_min_length  1000;
: gzip_buffers     4 8k;   
: gzip_http_version 1.1; 
: gzip_types       application/x-javascript text/css application/xml;

: ...... 
}

轉自:http://renxiangzyq.iteye.com/blog/762759
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章