Apache1.3.20とmod_davを使って,WebDAVサーバを構築する

WebDAVサーバの構築

 WebDAVについては,@ITにわかりやすい記事がありました.

次世代プロトコルWebDAVの可能性

とりあえず,家〜会社〜客先で,ファイルの共有ができないかなあ..ということで, 自宅サーバに導入してみました.


今回使ったソフト

サーバ

Apacheは既にインストールされているという前提です.

mod_davをApacheに組み合わせることで,WebDAVを実現します.

...なお,Apache2を使った場合は,mod_davが既にソースに含まれています. その時の手順は,

WebDAVサーバの構築 (Apache2)

に書いてみました.


クライアント

  • WebDAVクライアントのOSは,Windows2000

アクセスするクライアントとしては,Windows2000の「Webフォルダ」を使います. Webフォルダ経由で,ファイルを読み書き,削除してみます.


mod_davのコンパイル

$ gzip -dv mod_dav-1.0.2-1.3.6.tar.gz
$ tar -xvof mod_dav-1.0.2-1.3.6.tar
$ cd mod_dav-1.0.2-1.3.6
$ ./configure
$ make
# make install

てな感じで,コンパイル,インストールできます.

私の環境では,/usr/local/apache/libexec に,libdav.so がコピーされました.


DAV用ディレクトリの準備

ロックファイル用

 mod_davはファイルアクセスの排他制御のために,ロックファイルを作ります. そのロックファイルを格納するためのディレクトリを作っておきます.

# mkdir /usr/local/apache/var
# chown nobody.nobody /usr/local/apache/var
# chmod 770 /usr/local/apache/var

WebDAVコンテンツ用

 WebDAVで,読み書きする対象になるディレクトリを作ります.

WebDAVでファイルを書き込むと,この中に格納されてゆくことになります.

mkdir /var/www/davhome
chown nobody.nobody /var/www/davhome
chmod 755 /var/www/davhome

Apacheの再コンパイル

 mod_davのモジュール libdav.so は,Apacheに動的にリンクして使います.そのため, ApacheはDSO(Dynamic Shared Object)機能が使える必要があります.

また,Webフォルダの特性上,ApacheからのHTTPレスポンスに特殊なヘッダをつける必要があるため, mod_headersも有効になっている必要があります.(おおはまりの原因...)

# /usr/local/apache/bin/httpd -l

でApacheに組み込まれているモジュールを調べると,両方とも含まれていなかったので, Apacheを再コンパイルしました.

Apacheのソースディレクトリで,

$ ./configure --enable-module=so --enable-module=headers
$ make clean
$ make
〜 念のため httpd.conf を待避しておいて 〜
# make install


Apacheの設定

 httpd.confに,以下の内容を追加します. mod_davと,mod_headersの設定が記述してあります.

mod_davについては,

  • ロックファイルは /usr/local/apache/var/DAVLock のファイル名で作る
  • コンテンツは /var/www/davhome ディレクトリ内に作る
  • URLでは /dav という名前でアクセスできるようにする
  • 認証に使うパスワードファイルは /usr/local/apache/conf/.dav だよ
  • davuser というユーザ名で認証されないと,まともに使えない

という内容で,mod_headersについては,MS-Author-Via つうヘッダを付けよというものです.

このヘッダがないとWebフォルダ君は,相手がFrontPage Server Extensionだと勘違いするらしく, /_vti_inf.html といった変なファイルを要求して自滅してしまうのです.

httpd.confへ追加

LoadModule dav_module libexec/libdav.so
AddModule mod_dav.c
 
DAVLockDB /usr/local/apache/var/DAVLock
DAVMinTimeout 600
Alias /dav /var/www/davhome
 
<Directory /var/www/davhome>
      DAV On
      AllowOverride None
      Options None
      AuthName "KamoLand WebDAV Folder"
      AuthType Basic
      AuthUserFile /usr/local/apache/conf/.dav
      <LimitExcept HEAD OPTIONS>
           Require user davuser
      </LimitExcept>
      RemoveHandler .cgi
</Directory>
 
Addmodule mod_headers.c
 
<Location />
     Header add MS-Author-Via "DAV"
</Location>

RemoveHandlerは,CGIプログラムが実行されてしまうことの抑制です.うちは全域で拡張子cgiをCGIプログラムとして実行可能にしているので,CGIプログラムをダウンロードできるようにするためにはこの指定が必要なのです.

パスワードファイルの .dav については,引き続き説明します.


WebDAV用パスワードファイルの作成

 WebDAVアクセスに制限をかけるために,ここでは davuser というユーザ名を,WebDAVアクセス用に作っています. こいつのパスワードを設定するために,htpasswdを使います.
# /usr/local/apache/bin/htpasswd -c /usr/local/apache/conf/.dav davuser
を実行して,パスワードを入力すれば,パスワードファイル .dav が作成されます.

※なおこの作成方法(デフォルトなのでcrypt関数方式)だと,パスワードの先頭8文字しか使われないため強度的にいまいちです.-mオプションを付けてMD5にするのが望ましいです

この davuser は,Linuxにログインできるユーザとは全く無関係です.


Webフォルダの使用

 ネットワークでつながっているWindows2000機を使って, WebDAVでアクセスできることを確認します.

 「マイネットワーク」ー「ネットワークプレースの追加」として, こんな風に

ネットワークプレースの追加1

 場所:http://さっき設定したサーバのURL/dav

と入力します.

 「次へ」ボタンをクリックすると,ユーザ名とパスワードを訊かれますので, 既にhtpasswdで設定したパスワードを入力します.

ネットワークプレースの追加2

 OKボタンをクリックすると,

ネットワークプレースの追加3

終了つうことで,適当な名前を入力すると,こんな風にウインドウが開きます.

ネットワークプレースの追加4

こうなれば,普通のWindows感覚で,ファイルをコピーできますぜ旦那.うひょひょ.


日本語対応

 で,しばらく試してみると気がつくのですが,日本語のファイル名,フォルダ名が使えません.

もはや,日本語ファイル名をあきらめるなどできず,困ってしまうのですが, @ITに素晴らしい記事がありました.
日本語ファイル名の利用とバージョン管理

ここで紹介されている mod_encoding.c を使うと,見事に日本語ファイル名が使えるようになりました.

手順は,上記リンク先に書いてあるとおりで,mod_encoding.cをダウンロード後,

$ apxs -c mod_encoding.c
# apxs -i mod_encoding.so
こんな感じでコンパイル,インストール.

そして,httpd.confには以下の記述を追加しました.

httpd.confへ追加

LoadModule encoding_module libexec/mod_encoding.so
AddModule mod_encoding.c
<IfModule mod_encoding.c>
   EncodingEngine on
   SetServerEncoding UTF-8
   AddClientEncoding SJIS "Microsoft .* DAV"
   AddClientEncoding SJIS "xdwin9x/"
   AddClientEncoding EUC-JP "cadaver/"
</IfModule>

これにて一件落着

のはずなんですが,どうもWebフォルダからProxyを経由してWebDAVサーバに接続しようとすると, 失敗してしまうという現象が発生しました.ん〜,これでは使えんぞ.困った.

これは結局,通っているProxyがWebDAVに対応していなくてメソッドを却下してしまうということでした.無念.
WebDAV / Proxy Interoperability

仕方がないので,httpsを使うことにして解決しました.(httpsだと通信内容にプロキシは関与できない)

さらに後日,WindowsXPを購入.そのWebフォルダ機能を使ってアクセスしようとすると, エラーでアクセスできない!

というわけで,WebDAVサーバの構築 #2(WindowsXPからアクセスする) へ続く...


© 2023 KMIソフトウェア