私はnginx 1.4.4で動作していますUbuntu 12.04.4。
nginxは、Railsアプリケーションサーバーのクラスタを逆プロキシしています。
静的ファイル(主にアセット)は、アプリケーションサーバーにアクセスすることなく直接提供されます。
私はそれをgzip
応答に設定し、可能な場合は事前圧縮されたファイルを使用するようにしました。
http {
gzip on;
gzip_http_version 1.0;
gzip_proxied any;
# other ngx_http_gzip_module directives...
server {
# proxy configuration
location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
# root is inherited
try_files $uri =404;
error_page 404 /404.html;
}
}
}
これは機能します。
私はrealのgzip圧縮済みアセットとdummy非圧縮アセットを使用してテストしました。同じ名前だが内容が異なる:
/assets/application-a45d6...e2593.css # dummy content
/assets/application-a45d6...e2593.css.gz # real CSS
切り替えがわかりましたgzip_static
on
とoff
を使用すると、nginxは期待されるバージョンのファイルを正しく処理します。
ここまでは順調ですね。
ただし、このセットアップは、非圧縮バージョンの場合にのみ機能しますファイルも存在します。 pre-compressedバージョンのみを使用すると、404が発生します。
ドキュメント は言う:
gzip_static
「always」の値(1.3.6)では、クライアントがサポートしているかどうかを確認せずに、すべてのケースでgzip圧縮されたファイルが使用されます。とにかくディスク上に非圧縮ファイルがない場合、またはngx_http_gunzip_moduleが使用されている場合に役立ちます。
(はい:on
とalways
の両方を試しましたが、gunzip on
。何も変わっていません)
ファイルの圧縮バージョンをのみにしても問題ないことを示唆しているようです。これは本当ですか?構成に問題はありますか?
バグを発見した可能性があります。しかし、一般的に、3つの理由から、どちらのファイルも必要です。
gzip_static always;
彼らはそれを理解していないかもしれません。非圧縮ファイルはNginx 1.6では必要ありません。
location ~ \.txt$ {
gzip_static on;
gunzip on;
}
両方とも curl http://localhost/index.txt
およびcurl -H "Accept-Encoding: gzip" http://localhost/index.txt | gunzip
だけで正常に機能するようになりました/srv/www/localhost/index.txt.gz
私のルートディレクトリ。
@hendryの言うことに反して、元のファイルを保持する必要があります。
Nginx 1.15.9 (Ubuntu)
を使用しています。
gzip_staticは次の場所にコンパイルされています。
nginx -V 2>&1 | grep "\-\-with\-http_gzip_static_module
gunzip
は以下でコンパイルされます:
nginx -V 2>&1 | grep "\-\-with\-http_gunzip_module"
。
古くなっているかもしれませんが、私はこれを見つけました:
try_filesはgzip_staticを認識しません。ただし、非gzファイルと.gzファイルの両方が存在する場合、nginxは引き続きそれを受け入れます。これは、gzが存在しないかどうかに関係なく、適切な場合に.gzバージョンを提供する「通常の」gzip_static処理とは異なります。 - http://mailman.nginx.org/pipermail/nginx/2012-June/034102.html
Try_filesがそこで機能するためには元のファイルが必要であり、常にgzip_staticの影響を受けないようです。これは、try_files $ uri = 404では$ uriファイルが存在する必要があるためです。 - https://trac.nginx.org/nginx/ticket/157
これは私のnginx.conf
です:
events {
worker_connections 768;
}
http {
server {
# Enable static gzip
gzip_static on;
gunzip on;
listen 8080 default_server;
listen [::]:8080 default_server;
root /home/user/projects/project1/build;
location / {
try_files $uri /index.html;
}
}
}
Sudo nginx -t -c nginx.conf -p $PWD
で実行します。
Sudo killall -9 nginx; Sudo nginx -c nginx.conf -p $PWD; ps aux | grep nginx
で再起動します。