Apache で WebDAV を利用
Windows では Web フォルダ、Macintosh では iDisk というファイル共有を実現したサービスがあります。このサービスを、WebDAV (Web-based Distributed Authoring and Versioning) という HTTP を利用してファイル共有を行なう仕組みを Apache に組み込んで実現してみます。以下の説明は、Solaris 2.6 にサーバーを構築しています。(他の UNIX 環境でもほとんど変わらないはずです。) また、Apache の構築や設定ができることを前提に記述しているので、Apache についての細かい説明は省略しています。
必要なもの
Apache オフィシャルページ http://www.apache.org/dist/httpd/apache_1.3.20.tar.gz
mod_dav モジュール http://www.webdav.org/mod_dav/mod_dav-1.0.2-1.3.6.tar.gz
インストール方法
module をダイナミックリンクで利用できるように、Apache を DSO (Dynamic Shared Object) を有効にして作成します。 ほとんどデフォルトのまま構築するので、Apache は /usr/local にインストールされます。
# gzip -dc apache_1.3.20.tar.gz | tar xf - # cd apache_1.3.20 # ./configure --enable-module=so # make # make install
続いて、mod_dav モジュールの作成。 インストールすると、mod_dav.so をロードするように httpd.conf を作り変えてくれます。
# cd .. # gzip -dc mod_dav-1.0.2-1.3.6.tar.gz | tar xf - # cd mod_dav-1.0.2-1.3.6 # ./configure # make # make install mkdir -p /usr/local/apache/libexec && /usr/local/apache/bin/apxs -i -a -n dav libdav.so [activating module `dav' in /usr/local/apache/conf/httpd.conf] cp libdav.so /usr/local/apache/libexec/libdav.so chmod 755 /usr/local/apache/libexec/libdav.so cp /usr/local/apache/conf/httpd.conf /usr/local/apache/conf/httpd.conf.bak cp /usr/local/apache/conf/httpd.conf.new /usr/local/apache/conf/httpd.conf rm /usr/local/apache/conf/httpd.conf.new
これで mod_dav は Apache に組み込まれます。インストールすることで、httpd.conf は下記のように libdav.so をロードするように追記されます。
LoadModule dav_module libexec/libdav.so
AddModule mod_dav.c
設定ファイル httpd.confの編集と共有フォルダとして公開するフォルダの指定
httpd.conf を編集して、共有フォルダの設定を行います。共有するパスを DAV(http://<server>/DAV/)と設定するには以下の内容を httpd.conf に追加します (最も単純な設定) 。 <Location> ディレクティブを利用していますが、<Directory> ディレクティブでもかまいません。
<IfModule mod_dav.c> DAVLockDB var/DAVLock DAVMinTimeout 600 <Location /DAV> DAV On </Location> </IfModule>
ファイルの排他制御を考慮するためのロックファイルの指定と、DAV を有効にするパスの指定を記述します。上記のように設定したなら、実際に利用されるディレクトリーを作成しておかなければなりません。以下で、ディレクトリーのオーナーを nobody に設定していますが、これは、httpd.conf の User ディレクティブで指定されたユーザーを指定しなければなりません。
# mkdir /usr/local/apache/var # chown nobody:nobody /usr/local/apache/var # chmod 770 /usr/local/apache/var # mkdir /usr/local/apache/htdocs/DAV # chown nobody:nobody /usr/local/apache/htdocs/DAV # chmod 770 /usr/local/apache/htdocs/DAV
あとは、Apache を起動すれば共有フォルダとして http://<server>/DAV/ が利用できるようになります。このままでは、誰でも利用できてしまうので、認証ぐらいさせたいと思うなら Apache のアクセス制御の機構 <Limit>ディレクティブを利用できます。
<IfModule mod_dav.c> DAVLockDB var/DAVLock DAVMinTimeout 600 <Location /DAV> DAV On <Limit GET PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
AuthType Basic
AuthName "WebDAV"
AuthUserFile /usr/local/apache/var/dav_users.pwd
Require valid-user
</Limit> </Location> </IfModule>
認証用のパスワードファイル(/usr/local/apache/var/dav_users.pwd)については、htpasswd コマンドなどを利用して作成すると良い。
また、安全性への配慮として SSL ぐらいは対応させないとグローバルなサーバーとしては利用は控えた方が良いですね。
実際に参照してみよう
設定が終わったら、Apache を起動して Windows で Web フォルダを利用してみます。
# /usr/local/apache/bin/apachectl start
サーバー側で Apache が起動できたら Windows で Web フォルダを共有します。ここでは、サーバーが dav.foobar.co.jp で、クライアントが Windows 2000 として説明します。
Windows 2000 上の「マイ ネットワーク」をマウスでダブルクリックし、「ネットワーク プレースの追加」を行います。
ネットワークプレースの場所(URL)を指定し、「次へ(N)」ボタンをクリックします。
続いて、ネットワークプレース名(フォルダーとなる名前)を入力し(デフォルトでも良い)、「完了」ボタンを押します。
マイネットワークの中に Webフォルダが追加されます。(実際には、上記「ネットワークプレースの追加ウィザード」を完了した時点で Webフォルダーが開きます。)
あとは、通常の Windows のファイル操作同様、Webフォルダーにドラッグアンドドロップでファイルを追加できます。注意事項として、日本語のファイル名は使用できない(Windows NT/2000 上の Apache だったら大丈夫かな?でも、それなら IIS 5.0 を使えば済みますね)。mod_encoding を利用すると良いらしい...