12

で圧縮された Rails アセットがある場合、アセットを圧縮するように nginx を構成する必要がありますか (gzip を on に設定) rake assets:precompile? つまり、意味があるかどうか?パフォーマンスは向上しますか、それとも悪くなりますか? ありがとうございました!

4

5 に答える 5

18

rake Assets:precompileを実行すると、ファイルのgzipバージョンを送信するようにnginxを構成する必要があります。この構成を使用します。

user www-data www-data;
worker_processes 4;

pid /var/run/nginx.pid;

events{
    worker_connections 2048;
    use epoll;
}

http{
    include mime.types;
    default_type application/octet-stream;

    error_log /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;

    server_tokens off;
    server_name_in_redirect off;
    ignore_invalid_headers on;

    gzip off;
    sendfile on;

    upstream reverse-proxy{
        server 127.0.0.1:3000;
        server 127.0.0.1:3001;
        server 127.0.0.1:3002;
        server 127.0.0.1:3003;
    }   

    server{
        listen 80;
        server_name _;
        root /home/www-data/my_website/public;

        client_max_body_size 10M;
        client_body_buffer_size 512k;

        location ~ ^/assets/ {
            gzip_static on;

            add_header Cache-Control public;
            expires 4w;
            gzip on;
            gzip_vary on;
            gzip_proxied any;
            gzip_disable "MSIE [1-6]\.";
            gzip_comp_level 6;
            gzip_types application/x-javascript text/css text/html image/x-icon image/png image/jpeg image/gif;
        }

        location / {
            try_files $uri @ruby;
        }

               location @ruby {
                        proxy_set_header  X-Real-IP  $remote_addr;
                        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header  Host $http_host;
                        proxy_redirect    off;

                        proxy_pass http://reverse-proxy;
                }

    }

}
于 2012-12-06T03:23:42.973 に答える
7

いいえ、ありません。それらは同じ種類の圧縮ではありません。を実行するrake assets:precompileと、実際に行っていることは、一連のファイルを 1 つのファイルに結合してディスクにダンプすることだけです。実際、公式ドキュメントによると、それは2つのファイルです:

ファイルがプリコンパイルされると、Sprockets はアセットの gzip (.gz) バージョンも作成します。Web サーバーは通常、妥協点として中程度の圧縮率を使用するように構成されていますが、プリコンパイルが 1 回行われるため、Sprockets は最大の圧縮率を使用して、データ転送のサイズを最小限に抑えます。一方、Web サーバーは、圧縮されていないファイル自体を圧縮するのではなく、圧縮されたコンテンツをディスクから直接提供するように構成できます。

必要に応じて gzip を使用できるため、これは重要ですが、強制するわけではありません。Gzip 圧縮は、実際の圧縮 (ファイルの連結だけではない) であり、転送する必要があるデータの量を減らしますが、プロセッサの処理能力 (圧縮と解凍) を犠牲にします。ページ サイズとあなたの (そしてあなたのユーザーの) ハードウェアによっては、サイトをかなり劇的に改善する可能性があります。

于 2012-12-06T00:20:39.033 に答える
1

はい、パフォーマンスを向上させたい場合は必要です。

次のブロックをサイト構成に追加するだけです。

location ~ ^/(assets)/  {
  root /path/to/public; # CHANGE THIS
  gzip_static on; # to serve pre-gzipped version
  expires max;
  add_header Cache-Control public;
}

構成でルート パスを変更します。それだけです。

RecommendationFromDocumentation™: http://guides.rubyonrails.org/asset_pipeline.html

于 2015-01-15T13:10:10.560 に答える