Make nginx gzip more than JSON

In the process of admiring a recent map from The Economist, I ended up complaining about resources that make up the map not being gzipped. It's Twitter, what do you expect.

I then realized that if that map were on my site, I'd have the same criticisms: the .js and .csv files wouldn't be sent across the wire gzipped.

The fix is to tell nginx to gzip a couple MIME types. Previously, I'd told nginx to gzip json. To zip additional content types, I had to modify nginx.conf and mime.types, both in /etc/config on my machine.

The modified, expanded gzip section in nginx.conf, in the main http block:

##
# Gzip Settings
##

gzip on;  
gzip_disable "msie6";

gzip_vary on;  
gzip_proxied any;  
gzip_comp_level 6;  
gzip_buffers 16 8k;  
gzip_http_version 1.1;  
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript text/csv;  

For MIME types, that same http block in nginx.conf also has:

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

In the types block in the mime.types file, add an entry for csv:

text/csv                 csv;  

Reload the nginx configuration and the server should be sending compressed responses for the MIME types in question (javascript files as well as comma-separated value files). I put up a copy of the map in question to verify (note that it now requires about 500k as opposed to over a MB).