LoginSignup
5
5

More than 3 years have passed since last update.

WebDAVサーバとしてのApacheとnginx

Last updated at Posted at 2019-11-11

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の最初のあたりを以下のように変更。

/etc/apache2/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に以下の内容を追加。

/etc/nginx/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になります。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5