Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I pre-compress files with mod_deflate in Apache 2.x?

I am serving all content through apache with Content-Encoding: zip but that compresses on the fly. A good amount of my content is static files on the disk. I want to gzip the files beforehand rather than compressing them every time they are requested.

This is something that, I believe, mod_gzip did in Apache 1.x automatically, but just having the file with .gz next to it. That's no longer the case with mod_deflate.

like image 943
Otto Avatar asked Sep 16 '08 18:09

Otto


2 Answers

This functionality was misplaced in mod_gzip anyway. In Apache 2.x, you do that with content negotiation. Specifically, you need to enable MultiViews with the Options directive and you need to specify your encoding types with the AddEncoding directive.

like image 199
Aristotle Pagaltzis Avatar answered Oct 05 '22 13:10

Aristotle Pagaltzis


To answer my own question with the really simple line I was missing in my confiuration:

Options FollowSymLinks MultiViews 

I was missing the MultiViews option. It's there in the Ubuntu default web server configuration, so don't be like me and drop it off.

Also I wrote a quick Rake task to compress all the files.

namespace :static do     desc "Gzip compress the static content so Apache doesn't need to do it on-the-fly."     task :compress do         puts "Gzipping js, html and css files."         Dir.glob("#{RAILS_ROOT}/public/**/*.{js,html,css}") do |file|             system "gzip -c -9 #{file} > #{file}.gz"         end     end end 
like image 43
Otto Avatar answered Oct 05 '22 11:10

Otto