nginxによるgzip圧縮について【技術メモ】

これは何

nginxでproxyするときにgzip圧縮してレスポンスする方法を学んだのでメモ書き。 nginx versionは 1.11.10。

動作確認

レスポンスヘッダに以下のものが含まれる

  • Vary: Accept-Encoding
  • Content-Encoding: gzip

設定内容

  • gzip_buffers 1000 64k ;   
    • 配信する最大サイズと対応させる。
    • 「マスタリングNginx」によれば、bufferが足りないと巨大なファイルは途中で切れてしまう現象が発生するとのこと。デフォルトだと(確か)128kまでしか圧縮できない。
    • 実際に使う分だけそのとき割り当てられる。
  • gzip_types
    • text/html はデフォルト。他のmime typeに対して使うなら追加する。
  • gzip_proxied any;
    • プロキシしているレスポンスについても必ず圧縮をかける。
  • gzip_vary on;  
    • Accept Encoding に gzip入れていないものについては別のキャッシュが使われる
  • gzip_comp_level;  
    • スマホなどで見ることも多い場合は基本は圧縮したほうがよい。「マスタリングNginx」によれば圧縮速度とサイズのトレードオフでバランスのとれた圧縮は4か5。圧縮にさけるリソースはそこまでないと考えれば1とか。(1でも9でも圧縮率には大差ないという情報も)。
  • gzip_disable msie6; 
    • msie4 ~ 6はAccept Encodingを送ってくるがちゃんとgzipを扱えないことがあるという情報も。msie6はIEのver 4~6に対応したエイリアスっぽい。一応入れておくほうがよさそう。

メモ

配信サーバの画像のgzip圧縮しようかと思って調べたけど、そもそもjpegは圧縮されたフォーマットだったのだった。 結局使わなかった設定。