压缩rails资产和nginx gzip

ka8*_*725 12 ruby-on-rails nginx asset-pipeline

如果我有压缩的rails资产,我是否必须配置nginx来压缩资产(gzip设置为on)rake assets:precompile?我的意思是它有意义吗?性能会更好还是更差?谢谢!

Jon*_*ret 17

做rake资产:预编译,你必须为发送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;
                }

    }

}
Run Code Online (Sandbox Code Playgroud)

  • nginx文档说我们不需要添加text/html,因为它默认完成(在gzip_types下).使用基于位置的gzipping的一件事显然这在443土地上不起作用,对吧?我将它移动到http块,以便一切都被枪杀.你的到期也很纯粹,顺便说一下. (4认同)

Bra*_*rth 7

你不可以.它们不是同一种压缩方式.当你运行时rake assets:precompile,你真正要做的就是将一堆文件加入一个文件并将其转储到磁盘上.实际上,根据官方文档,它是两个文件:

在预编译文件时,Sprockets还会创建资产的gzip(.gz)版本.Web服务器通常配置为使用适度的压缩比作为折衷,但由于预编译发生一次,Sprockets使用最大压缩比,从而将数据传输的大小减小到最小.另一方面,Web服务器可以配置为直接从磁盘提供压缩内容,而不是自己放缩非压缩文件.

这对你很重要,因为它允许你使用gzip,如果你愿意,但它不会强迫你这样做.Gzip压缩是真正的压缩(不仅仅是连接文件),减少了您必须传输的数据量,但却牺牲了处理器能力(压缩和解压缩).根据页面大小和您(以及您的用户)的硬件,它可能会相当显着地改善您的网站.