Menu

Apache2でmod_deflateとmod_fastcgi / tDiaryをFastCGI化

 mod_deflateもmod_fastcgiも、それぞれはうまく行くが、これらが組み合わさってFastCGIスクリプトにDEFLATEが掛かるとまずいようだ。FastCGIスクリプトの出力が終わってもなかなかコネクションが切れず、ダウンロードに失敗するクライアントもある。→どうもContent-Lengthが伸張後の長さになっている模様。

 なお、tDiaryをFastCGI化にするには次のようなファイルをindex.fcgiとして置いて.htaccessでDirectoryIndex index.fcgiすればOK。ENVを設定してやるのが味噌かな。そうしないと@conf.base_urlなどがちゃんとセットされない。

#!/usr/bin/env ruby
 
$MY_DIR = File.dirname(__FILE__)
 
$LOAD_PATH.unshift $MY_DIR
 
require 'fcgi'
 
FCGI.each_cgi { |cgi|
  begin
    ENV.clear
    ENV.update(cgi.env_table)
 
    $CGI = cgi
    def CGI::new; $CGI; end
 
    load File.join($MY_DIR, 'index.rb')
  ensure
    class << CGI; remove_method :new; end
  end
}

 いろんなサイトを参考にさせてもらいましたが、みなさん苦労されている様子。なかなかすべてすっきりとは行かないもんだ。

 とりあえず、この日記ではmod_fastcgiよりmod_deflateを優先しました。今のところ負荷はたかが知れているし、転送料を減らした方がみんなニコニコのはず。

 なお、mod_deflateの設定はこう。なんか、SetOutputFilter DEFLATEAddOutputFilterByType ...を両方書いた例を載せているサイトがちらほらあったが、意図がわからない。

<IfModule mod_deflate.c>
  <Location />
    # Insert filter
    SetOutputFilter DEFLATE
 
    # Netscape 4.x has some problems...
    BrowserMatch ^Mozilla/4 gzip-only-text/html
 
    # Netscape 4.06-4.08 have some more problems
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
 
    # MSIE masquerades as Netscape, but it is fine
    # BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
 
    # NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
    # the above regex won't work. You can use the following
    # workaround to get the desired effect:
    BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
 
    # Don't compress images
    SetEnvIfNoCase Request_URI \
        \.(?:gif|jpe?g|png|ico|z|taz|t?gz|t?bz2?|zip|lzh|sit|rar|pdf|mp3|ogg|wma|rm|wmv|mov|mpe?g)$ \
        no-gzip dont-vary
 
    # Make sure proxies don't deliver the wrong content
    Header append Vary User-Agent env=!dont-vary
  </Location>
</IfModule>

コメントを残す

メールアドレスが公開されることはありません。