Latest Entries

mod_xsendfile

mod_xsendfile
認証して、さらにダウンロードという手法は通常、プログラムだけwebから見られるように
していた。で、実態はread/writeで転送するわけだ。

しかし、実際にやってみると転送量にまけて、プログラムではとっても無理。
プログラムで可能なのは、せいぜいjpgとかmp3まで。
動画などの大容量ファイルでは、認証後、locateみたいな仕組みが必須でした。

それを実現するのが、mod_xsendfileです。

あるプログラムからxのついたヘッダをだすとapacheの通常のとは違うルートで転送してくれる。
だから、.htaccessでdeny from allとしておいて、認証プログラムだけallowすればいいのです。

ただ、まだ使いこなしてなくて、認証プログラムとダウンロードプログラムを同じフォルダに
置かないと実施できない…

C言語でCGIする

とりあえず、PHPでは2Gの壁とメモリの壁が越えられないです。
ローテートするログも3Gをになってしまったので、とりあえず
Cで書き直し。
#define _LARGEFILE_SOURCE
#define _FILE_OFFSET_BITS 64
この呪文を書いておけば、動きますよ。

で、問題はダウンロードのためのCGI。
はまり点その1:エラーの返し方
 メインプロセスなら、自分でHTTPヘッダーを作ればいいんでしょうが、
 CGIだと、どうしてもcontent-typeがないとserver errorになってしまいます。
 解決策はprintf("Status: 404 Not Found\n\n");
必要なら、この後に404のページを書いて、exit(error_code)すればいいです。

はまり点その2:ファイル名
 MSの仕様で、以下のファイルタイプが必要です。
printf( "Content-type: application/octetstream;\n");
//printf( "Accept-Ranges: bytes\n");
printf( "Content-Length: %u\n",length);
printf( "Content-Disposition: inline; filename=%s\n\n",filename);
以下本体を出力

はまり点その3:レンジ
 getenv("HTTP_RANGE")でレンジは取れますが、
 うまくいかないー。まだHTTPヘッダが足りないんだな。
 上のAccept-Rangeを出せば、一応レンジモードには突入しますが、計算が合わない。
 apacheと比較する日々が続きそうです…

AVIとか、WMVとかダウンロードさせる

mime.typesだけいじってましたが、IEには効かないんですって。
Proxyとか
httpd.confに

AddType application/octet-stream .avi .mpg .wmv
Header set content-disposition attachment

これでOK.

新しいPC

鯖つくり中。

へたれ設定

とりあえずLVMに挑戦。
fdiskで8eを設定して、
/sbin/lvmでpvcreate,vgextentとかする。
extent2fsとかなんとかすると増えるはずなんだけど、途中で止まっちゃうんだわ。

すごい中途半端な増え方。
どっかで練習せなあかんな。

あとDNSも自力設定。
MXレコードの設定とAレコードの設定でいいん?
あー。本当に何にも知らないですねー。
あと1Uのネットワークボード増設にはライザーカードが必要というのも知らなかった。
ボードが900円くらいで1万円もするライザーカードかってられねーって。