gzip 是一種壓縮工具, Web Server 透過 gzip 將數據壓縮, 再發送給使用者的瀏覽器解壓。這樣所需傳送的數據便會減少, 提昇網站的速度。
以下是在 Nginx 開啟 gzip 壓縮的方法。
在開啟 gzip 前, 可以先用 curl 檢視一下目前 Nginx 是否有開啟 gzip, 輸入以下指令:
- $ curl -H “Accept-Encoding: gzip” -I http://localhost/test.html
以下是 CentOS 下用 yum 安裝的 Nginx 的預設輸出:
- $ curl -H “Accept-Encoding: gzip” -I http://localhost/test.html
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Tue, 26 Feb 2019 01:33:32 GMT
Content-Type: text/html
Content-Length: 3700
Last-Modified: Tue, 06 Mar 2018 09:26:21 GMT
Connection: keep-alive
ETag: “5a9e5ebd-e74”
Accept-Ranges: bytes
上面的輸出並沒有 gzip, 代表並沒有開啟 gzip, 雖然 Ubuntu 下預設會開啟 gzip, 但只設定 gzip on, 只會對 HTML 檔壓縮, 其他類型的檔案 (例如 css 或 js 檔) 不會壓縮.
在 CentOS 下建立 gzip 的設定檔:
- $ sudo vi /etc/nginx/conf.d/gzip.conf
加入以下內容:
1 2 3 4 5 6 7 8 9 |
gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_http_version 1.1; gzip_min_length 256; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon; |
如果是用 Ubuntu, 開啟 Nginx 的設定檔:
- $ sudo vi /etc/nginx/nginx.conf
找到以下 gzip 的設定
1 2 3 4 5 6 7 8 9 10 11 12 13 |
## # `gzip` Settings # # gzip on; gzip_disable "msie6"; # gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1.1; # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; |
可以看到幾個 gzip 的設定也被註釋掉, 將這樣 gzip 設定前的 “#” 刪除, 改成這樣:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
## # `gzip` Settings # # gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_min_length 256; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon; |
儲存設定後重新啟動 Nginx:
- $ sudo systemctl restart nginx
現在可以再用 curl 測試, 可以一拼測試 css 及 js 檔:
-
$ curl -H “Accept-Encoding: gzip” -I http://localhost/test.html
$ curl -H “Accept-Encoding: gzip” -I http://localhost/test.css
$ curl -H “Accept-Encoding: gzip” -I http://localhost/test.js
現在 curl 的輸出最後一行, 會看到 “Content-Encoding: gzip”, 那便表示 gzip 已經開。