8

I have no idea where to place my gzip compression lines within my http block, shown here.

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

    log_format  main    '$remote_addr - $remote_user [$time_local] "$request" '
                        '$status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/nginx/access.log main;

    keepalive_timeout 65;

    server {

        listen 8080;

        root /usr/share/nginx;

        location / {
            root /usr/share/nginx/html;

            try_files $uri /index.html;

            autoindex off;
        }

        location ~ ^/(images|fonts|videos)/ {
            root /usr/share/nginx/assets;

            autoindex                off;
            expires                  7d;
            proxy_redirect           off;
            proxy_max_temp_file_size 0;

        }

        location ~ \.(mp3|mp4) {

        }
    }

    include /etc/nginx/conf.d/*.conf;
}

The lines I want to use for gzip compression are here, and I don't know whether to put these in the server block, before the server block, or in the location block:

# Compression
gzip on;
gzip_proxied any;
gzip_types text/plain text/xml text/css application/x-javascript;
gzip_vary on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
gzip_static on;

I have gzip_static set to "on" because I'm using gulp-gzip to compress various css and js files.

robinnnnn
  • 1,675
  • 4
  • 17
  • 32
  • how did you determine that gzip is not functioning ? gzip is enabled bu default in nginx default installations, you can find it under nginx.conf file, however, you can add specific customizations for your appropriate case in the zone you see it fit – Abdullah Shahin Feb 29 '16 at 19:53
  • By clicking the network tab I can see whether the content was gzipped by looking for a [Content-Encoding](http://superuser.com/questions/295360/how-to-know-if-a-site-is-gzipped) field. For some reason my js / css files that I'd like to gzip don't display that field. – robinnnnn Feb 29 '16 at 19:57
  • [Here](http://imgur.com/jj9WGro) are the response headers for my build.min.js. Note how there is no `Content-Encoding: gzip` field – robinnnnn Feb 29 '16 at 19:59
  • it might be has something to do with the gzip_types you defined not matching what nginx can see, try to remove it and see if that is the case, nginx shall use gzip by default – Abdullah Shahin Feb 29 '16 at 20:14
  • i just checked a configuration for one of my web apps and this was the conf that made it work, I hope it help you [gzip_types text/plain text/html text/css application/json application/javascript text/xml application/xml text/javascript;] – Abdullah Shahin Feb 29 '16 at 20:22

1 Answers1

22

Edit your config file like this and it should work:

gzip on;
gzip_comp_level 6;
gzip_vary on;
gzip_types text/plain text/css application/json application/x-javascript application/javascript text/xml application/xml application/rss+xml text/javascript image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype;

Note the added types, because sometimes those types can be detected in different ways by different systems.

peixotorms
  • 1,246
  • 1
  • 10
  • 21