NGINX gzip 沒有正常運作的解決方式
我在弄的網站,主要是顯示一些資料,由於後端的data source優化非常差,常常會有「網頁上要顯示5個數字,但是我需要和後端拿30MB的json檔案」這種恐怖情況發生。
原本都只有在公司內部使用這個網站,自從開放到Internet之後,恐怖的事情來了,速度慢就算了,我用手機測試……
流量爆炸了
要優化後端不是短期內有辦法解決的,但是用NGINX輸出gzip格式,可以大大減少流量,30MB的原始檔壓縮後大概會剩下2MB
啟用gzip
測試是否輸出為gzip
查看http header裡面是否有 content-enconding: gzip
-用瀏覽器的開發工具
- 用curl指令
curl -I -H “Accept-Encoding: gzip” “http://your_website”
沒有gzip的原因
HTTP version
這個搞我搞很久,我放最上面XD
NGINX gzip有個屬性 gzip_http_version 預設是 1.1,request的HTTP版本最低要求1.1。用瀏覽器基本上沒有問題,都有輸出gzip。然而我用另一個NGINX 反向代理(reverse proxy)時,就沒有輸出gzip。
原因就是上面說的HTTP版本,因為NGINX在向upstream request時,預設使用 HTTP/1.0,不滿足gzip_http_version=1.1。
要解決這個問題有兩條路:
- 把gzip_http_version改成1.0
- 把proxy_http_version改成1.1(NGINX 1.1.4 以上才有這個選項)
其他原因
- gzip_types有沒有符合
- 檔案有沒有超過gzip_min_length指定的大小
- gzip_proxied預設off,也就是說NGINX預設不會壓縮reverse proxy的資源