Apache1.3.20とmod_davを使って,WebDAVサーバを構築する WebDAVサーバの構築WebDAVについては,@ITにわかりやすい記事がありました. とりあえず,家〜会社〜客先で,ファイルの共有ができないかなあ..ということで, 自宅サーバに導入してみました.
今回使ったソフトサーバ
Apacheは既にインストールされているという前提です. mod_davをApacheに組み合わせることで,WebDAVを実現します. ...なお,Apache2を使った場合は,mod_davが既にソースに含まれています. その時の手順は, に書いてみました.
クライアント
アクセスするクライアントとしては,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については,
という内容で,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> パスワードファイルの .dav については,引き続き説明します. WebDAV用パスワードファイルの作成WebDAVアクセスに制限をかけるために,ここでは davuser というユーザ名を,WebDAVアクセス用に作っています. こいつのパスワードを設定するために,htpasswdを使います.
# /usr/local/apache/bin/htpasswd -c /usr/local/apache/conf/.dav davuser
※なおこの作成方法(デフォルトなのでcrypt関数方式)だと,パスワードの先頭8文字しか使われないため強度的にいまいちです.-mオプションを付けてMD5にするのが望ましいです この davuser は,Linuxにログインできるユーザとは全く無関係です.
Webフォルダの使用ネットワークでつながっているWindows2000機を使って, WebDAVでアクセスできることを確認します.「マイネットワーク」ー「ネットワークプレースの追加」として, こんな風に
![]() 場所:http://さっき設定したサーバのURL/dav と入力します. 「次へ」ボタンをクリックすると,ユーザ名とパスワードを訊かれますので, 既にhtpasswdで設定したパスワードを入力します.
![]() OKボタンをクリックすると,
![]() 終了つうことで,適当な名前を入力すると,こんな風にウインドウが開きます.
![]() こうなれば,普通の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に対応していなくてメソッドを却下してしまうということでした.無念.
仕方がないので,httpsを使うことにして解決しました.(httpsだと通信内容にプロキシは関与できない) さらに後日,WindowsXPを購入.そのWebフォルダ機能を使ってアクセスしようとすると, エラーでアクセスできない! というわけで,WebDAVサーバの構築 #2(WindowsXPからアクセスする) へ続く... |