作者 主題: nginx web server + r-proxy js gzip 壓縮問題  (閱讀 453 次)

0 會員 與 1 訪客 正在閱讀本文。

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
環境是 ubuntu 12.04 server
nginx 預設安裝已有 gzip 模組
在 nginx.conf 加個 gzip on 便能啟用壓縮功能
不過預設只壓 text/html 類型的資料
要壓縮 js, css 也只要加上 type 就可以
隨便 google 一下就能找到一堆設定教學

這兩天碰到的問題是,web 那邊 js 的 type 都加上去了
nginx 也重啟或 reload,但是卻都只有 text/html 有作用
 js 一直都沒有壓縮...

代碼: [選擇]
$ curl --header "Accept-Encoding: gzip,deflate" -I http://oas.xxxxxx.com/jquery-1.3.2.js
HTTP/1.1 200 OK
Server: nginx
Content-Type: application/x-javascript
Content-Length: 120763
Connection: keep-alive
Vary: Accept-Encoding
ETag: "52e15ded-1d7bb"
Cache-Control: no-cache
Accept-Ranges: bytes

弄了兩天,就一直都是這樣,用 firefox 來開
顯示 page info header 也跟上面一樣
後來改用內部 IP 直接連那台 web server
結果...

代碼: [選擇]
$ curl --header "Accept-Encoding: gzip,deflate" -I http://192.168.1.171/jquery-1.3.2.js
HTTP/1.1 200 OK
Server: nginx/1.4.4
Content-Type: application/x-javascript
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: no-cache
Content-Encoding: gzip

所以說,這台 web server  js 壓縮功能是有啟動
只是不知道為什麼用網域連線,js 壓縮功能就失效

後來想到用網域連線會透過 r-proxy
r-proxy 也是用 nginx, 那會不會跟 r-proxy 有關
查了一下 r-proxy server 的 nginx.conf
果然是只有預設的 gzip on,沒有其他 type 的設定
加上 type 在reload 後

代碼: [選擇]
gzip_types application/x-javascript text/css;
js, css 就能正常使用壓縮了
而且只要  r-proxy server 的 gzip 啟用
後端 web server  gzip 全都關閉
client 端也都能正常收到壓縮過的資料

另外發現一點
就算 web server  使用 gzip 壓縮
資料送到 r-proxy server 還是會先被解壓縮
如果 r-proxy server 沒有啟用 gzip
那送到 client 端的資料也就不會是壓縮過的

總結:用 r-proxy server 好處多多
不過也是有些容易使人沒注意到的小䧟井  :D