mod_deflateもmod_fastcgiも、それぞれはうまく行くが、これらが組み合わさってFastCGIスクリプトにDEFLATEが掛かるとまずいようだ。FastCGIスクリプトの出力が終わってもなかなかコネクションが切れず、ダウンロードに失敗するクライアントもある。→どうもContent-Lengthが伸張後の長さになっている模様。
なお、tDiaryをFastCGI化にするには次のようなファイルをindex.fcgiとして置いて.htaccessでDirectoryIndex index.fcgi
すればOK。ENVを設定してやるのが味噌かな。そうしないと@conf.base_url
などがちゃんとセットされない。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#!/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 DEFLATE
とAddOutputFilterByType ...
を両方書いた例を載せているサイトがちらほらあったが、意図がわからない。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<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> |