さまりー

画像アップロード可能な0chの改造版img0ch、PHPで書かれたphp0ch、
C言語で書かれたApacheモジュールのmod_0chを配布しています。
[DOWNLOAD][BBS][README][WIKI]

June 26, 2005

My memo[3]

昨日から今日の深夜一時までXREAのほとんどののサイトが停止していましたが、
深夜の一時に復活しました。k2.xrea.comはしばらく運用停止のこと。

話が変わりますが、今回はrepng2jpegが配布されている菅処で有名なSN uploaderを
mod_perlに対応してみるというものです。話が長いので、追記に入れます。

SN uploaderはmod_perlでも動かせます。
ただし、CGI.pmを必要とするバージョンでのみ動作可能です。
CGI.pm不要のupload.cgiでは動作しないようです。

まず、mod_perlに対応させるためにupload.cgiの設定を
相対パスから絶対パスに変更します。以下が該当します。
$set{'log_file'}
$set{'html_dir'}
$set{'src_dir'}
$set{'log_error'}

パーミッションも変更する必要があります。
その場合はコメントアウトされた説明にある、
otherの設定を適用したほうがいいです。
mod_perl2の場合はApache::RegistryをModPerl::Registryに変更し、
PerlHandlerをPerlResponseHandlerに変更します。
設置するURLはhttp://127.0.0.1/up/upload.cgiとします。
LoadFileの行はWin32で動かす場合入れたほうがいいです。

LoadModule perl_module modules/mod_perl.so
LoadFile "C:/usr/local/bin/perl58.dll"
<Perl>
use CGI qw();
CGI->compile;
</Perl>
<Location /up/upload.cgi>
SetHandler perl-script
PerlHandler Apache::Registry
</Location>
PerlSendHeader On
PerlFreshRestart On

mod_perl環境下で動かす場合メモリ消費が大きくなるので、
mod_proxyの併用をお勧めします。

その際、SN uploaderの設定を変更する必要があります。
Upload.cgiをログやアップロードされたファイルを格納した
ディレクトリとは別に配置します。
その際、<Location>のパスと$set{'base_cgi'}の設定を
変更してください。

以下はApache2(Portは80番)でのmod_proxyと
Apache1(Portは8088番)でのmod_perlを併用する時の
Apache2側のhttpd.confの例です。

KeepAliveとMaxClientの設定に関しては、
Apache2側ではKeepAliveをOnにし、MaxClientを高めに設定します。
Apache1側ではKeepAliveをOffにし、MaxClientを低く設定します。

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin admin@example.com
DocumentRoot "C:/www"
ServerName www.example.com

CustomLog logs/proxy_access.log common
ErrorLog logs/proxy_error.log

ProxyPass /up http://127.0.0.1:8088/up
ProxyPassReverse /up http://127.0.0.1:8088/up
</VirtualHost>