Ubuntu 18.04で試しましたが、他所も同じようなもんだと思います。
Apache
導入
sudo apt install apache2
RPMとかの人もそんな感じで宜しく。
準備
ロックファイル置き場を/var/www/tempにして、/var/www/html/davを/davとして公開するものとします。
sudo mkdir -p /var/www/temp /var/www/html/dav
sudo chown www-data:www-data /var/www/temp /var/www/html/dav
設定
cd /etc/apache2/mods-enabled/
sudo ln -s ../mods-available/dav.load dav.load
sudo ln -s ../mods-available/dav_fs.load dav_fs.load
sudo ln -s ../mods-available/dav_fs.conf dav_fs.conf
mods-availableにdav_lockというのもありますがdav_fsを使うなら必要ないそうです。
sites-available/000-default.confの最初のあたりを以下のように変更。
DavLockDB /var/www/temp/DavLockDB
<VirtualHost *:80>
<Directory /var/www/html/dav>
DAV On
</Directory>
セキュリティに関しては状況に応じて宜しくとしか。
そして再起動。
sudo service apache2 restart
ところがですよ!バグがあってindex.htmlがあるディレクトリでPROPFINDが失敗します。
修正
mod_dirにバグがあるとされるので外してしまいます。
cd /etc/apache2/mods-enabled/
sudo rm dir.load
sudo rm dir.conf
sudo service apache2 restart
nginx
導入
sudo apt install nginx nginx-extras
nginxでWebDAVするのは色々面倒だと書いてあるのをどっかで読んだのですが、そうでもないです。nginx-extrasが要るだけです。
準備
sudo mkdir -p /var/www/temp /var/www/html/dav
sudo chown www-data:www-data /var/www/temp /var/www/html/dav
設定
sites-available/defaultに以下の内容を追加。
location /dav/ {
client_body_temp_path /var/www/temp;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS;
create_full_put_path on;
dav_access user:rw group:rw all:rw;
autoindex on;
allow all;
}
例によってセキュリティは宜しく。
そして再起動。
sudo service nginx restart
試してみる
curlを使います。
sudo apt install curl
ディレクトリを作る
curl --request MKCOL http://localhost/dav/tmp/
nginxは最後のスラッシュが無いと409 Conflictって言います。なにがConflictだ?
ファイルを置く
curl --request PUT --data "hello" http://localhost/dav/hello.txt
一覧を取得する
プロパティを指定しない場合
curl --request PROPFIND --header 'Depth:1' http://localhost/dav/
デフォルトだと以下のプロパティが含まれます。
Apache | nginx | |
---|---|---|
creationdate | 有 | 有 |
displayname | 無 | 有 |
getcontentlanguage | 無 | 空 |
getcontentlength(ディレクトリ) | 無 | 有 |
getcontentlength(ファイル) | 有 | 有 |
getcontenttype | 有 | 空 |
getetag | 有 | 空 |
getlastmodified | 有 | 有 |
href | 有 | 有 |
lockdiscovery | 空 | 空 |
resourcetype(ディレクトリ) | 有 | 有 |
resourcetype(ファイル) | 空 | 空 |
source | 無 | 空 |
status | 有 | 有 |
supportedlock | 有 | 空 |
executable(ディレクトリ) | 無 | 無 |
executable(ファイル) | 有 | 無 |
プロパティを指定する場合
例えば
curl --request PROPFIND --header 'Depth:1' --data '<D:propfind xmlns:D="DAV:"><D:prop><D:resourcetype/></D:prop></D:propfind>' http://localhost/dav/
Apacheに対して明示的にgetcontentlengthを要求するとディレクトリのstatusが404になります。