Skip to main content

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 .


Source: Tips4allCCNA FINAL EXAM

Comments

  1. 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.

    ReplyDelete
  2. 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

    ReplyDelete
  3. I have an Apache 2 built from source, and I found I had to modify the following in my httpd.conf file:

    Add MultiViews to Options:


    Options Indexes FollowSymLinks MultiViews



    Uncomment AddEncoding:


    AddEncoding x-compress .Z
    AddEncoding x-gzip .gz .tgz



    Comment AddType:


    #AddType application/x-compress .Z
    #AddType application/x-gzip .gz .tgz

    ReplyDelete
  4. mod_gzip compressed content on the fly as well. You can pre-compress the files by actually logging into your server, and doing it from shell.

    cd /var/www/.../data/
    for file in *; do
    gzip -c $file > $file.gz;
    done;

    ReplyDelete
  5. You can use mod_cache to proxy local content in memory or on disk. I don't know if this will work as expected with mod_deflate.

    ReplyDelete
  6. I am afraid MultiViews will not work as expected: the doc says Multiviews works "if the server receives a request for /some/dir/foo, if /some/dir has MultiViews enabled, and /some/dir/foo does not exist...", in other words: if you have a file foo.js and foo.js.gz in the same directory, just activating MultiViews will not cause the .gz file to be sent even if the AcceptEncoding gzip header is transmitted by the browser (you can verify this behavior by temporarily disabling mod_deflate and monitoring the response with e.g. HTTPFox).

    I am not sure if there is a way around this with MultiViews (maybe you can rename the original file and then add a special AddEncoding directive), but I believe you can construct a mod_rewrite rule to handle this.

    ReplyDelete

Post a Comment

Popular posts from this blog

[韓日関係] 首相含む大幅な内閣改造の可能性…早ければ来月10日ごろ=韓国

div not scrolling properly with slimScroll plugin

I am using the slimScroll plugin for jQuery by Piotr Rochala Which is a great plugin for nice scrollbars on most browsers but I am stuck because I am using it for a chat box and whenever the user appends new text to the boxit does scroll using the .scrollTop() method however the plugin's scrollbar doesnt scroll with it and when the user wants to look though the chat history it will start scrolling from near the top. I have made a quick demo of my situation http://jsfiddle.net/DY9CT/2/ Does anyone know how to solve this problem?

Why does this javascript based printing cause Safari to refresh the page?

The page I am working on has a javascript function executed to print parts of the page. For some reason, printing in Safari, causes the window to somehow update. I say somehow, because it does not really refresh as in reload the page, but rather it starts the "rendering" of the page from start, i.e. scroll to top, flash animations start from 0, and so forth. The effect is reproduced by this fiddle: http://jsfiddle.net/fYmnB/ Clicking the print button and finishing or cancelling a print in Safari causes the screen to "go white" for a sec, which in my real website manifests itself as something "like" a reload. While running print button with, let's say, Firefox, just opens and closes the print dialogue without affecting the fiddle page in any way. Is there something with my way of calling the browsers print method that causes this, or how can it be explained - and preferably, avoided? P.S.: On my real site the same occurs with Chrome. In the ex