Apache 1.3.31 にWebDAVを

旅先での写真を共有したいと思ったので、いろいろと方法を考えてみました。思いついたのは、次の3つ。

FTP
おそらく一番スタンダートな方法。ただし標準でダイジェスト認証やSSLに対応しているものは少なく、セキュリティをあげるためにはクライアントサイドでのソフト導入が必要。
アップローダ
CGIでのアップローダ。ダウンロードは楽チンだがアップロードが面倒くさい。ブラウザの機能+セキュリティを利用できるのは大きい。
WebDAV
WindowsやMacOSXで標準サポートされるようになってきたFTP代替品。WindowsだとSSLにも標準対応なのでセキュリティ面も意外とよい。ドラックアンドドロップでファイルをやりとりできるのは◎。かわりにXMLパースなどサーバにかかる負荷はそれなりにあるので大規模には使いたくない。

ということで、使い勝手とセキュリティに重点をおきWebDAVを導入してみることにしました。以下、MacOSX上のApache 1.3.31(Apacheの導入方法はこちら)へのWebDAV導入方法を記します。

MacOSX 10.2.8 + Apache 1.3.31(mod_so導入済み)を想定しています。

方針として、作業は2つと思ったら3つでした。

  1. Apacheのリコンパイル、Apache 1.3.31のhttp_request.cにバグがあるため
  2. mod_encodingの導入、文字化けおよびXP認証問題の解決
  3. mod_davをDSO(Dynamic Shared Object)として導入

まずApacheのリコンパイル。これをしないとdav自体が使えません。問題解決策。ということで、/path/to/apache_src/src/main/http_request.cを修正します。1056行目付近です。

if ((r->status != HTTP_NOT_MODIFIED) && (r->status != HTTP_NO_CONTENT)
&& !ap_status_drops_connection(r->status)
&& r->connection && (r->connection->keepalive > 0)) {

(void) ap_discard_request_body(r);
}

if ((r->status != HTTP_NOT_MODIFIED) && (r->status != HTTP_NO_CONTENT)
&& !ap_status_drops_connection(r->status)
&& r->connection && (r->connection->keepalive != -1)) {

(void) ap_discard_request_body(r);
}

にしてリコンパイル。結果として変化するのはhttpdだけなので、以前のものを一旦退避→新しいものをインストール→そこから新しいhttpdを失敬して元の構成に戻すだけでOKです。

次にmod_encodingのインストール。ここを参考にMacOSX専用のmod_encodingを導入します。ダウンロードするファイルはここのページにあります。
インストールは付属README、および参考ページどおりなので割愛しますが、2点ほど補足します。
まず落としてきたmod_encodingですが、make時にcurlを使用してのファイルの取得にこけます。リダイレクトを認識しないようなのでMakefile中のcurlで取得するファイルをがんばって自分で探す、あるいはwgetに置き換えることが必要でした。
次のこのmod_encodingは何もしないままだとデバック情報をエラーログにずらずら書き出すのでうっとおしいです。それを解除するのはmod_encoding.cの先頭付近に#define MOD_ENCODING_DEBUG 0を記述してコンパイルしてください。

最後にmod_davのインストール。mod_encodingで落としてきたファイルを解凍するとmod_davディレクトリがあるので、その中のREADME-JPを参考に、パッチあて、インストールをしてください。これでうまくいきます。

Apacheの設定方法についてなどは他のより詳しいページを探してください。全体を通して『MacOSXでWebDAVサーバ』が非常に参考になりました。ありがとうございます。

October 12, 2004 05:31 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク

コメント

コメントする