WebDAV
WebDAV (Web Distributed Authoring and Versioning) は HTTP 1.1の拡張でありプロトコルとも言えます。WebDAV は HTTP 1.1 プロトコルを用いて読み書きできる方法の拡張からなります。NFS や SMB の代わりに、WebDAV は HTTP によるファイル転送を提供します。
この記事ではウェブサーバーを使ってシンプルな WebDAV を設定します。
目次
サーバー
Apache
Apache HTTP Server をインストールしてください。
そして WebDAV を有効化します。DAV のモジュールをアンコメント:
LoadModule dav_module modules/mod_dav.so LoadModule dav_fs_module modules/mod_dav_fs.so LoadModule dav_lock_module modules/mod_dav_lock.so
以下の行を /etc/httpd/conf/httpd.conf
に追加:
DAVLockDB /home/httpd/DAV/DAVLock
他のディレクティブ (例えば DocumentRoot
定義のすぐ下など) の外に追加するようにしてください。
次に、以下を追加 (これもディレクティブの外に):
Alias /dav "/home/httpd/html/dav" <Directory "/home/httpd/html/dav"> DAV On AllowOverride None Options Indexes FollowSymLinks Require all granted </Directory>
ディレクトリを作成:
# mkdir -p /home/httpd/DAV
DavLockDB のディレクトリのパーミッションを変更し、http
ユーザーにより書き込みができるようにします:
# chown -R http:http /home/httpd/DAV # mkdir -p /home/httpd/html/dav # chown -R http:http /home/httpd/html/dav
Nginx
メインライン版の nginx と nginx-mainline-mod-dav-extAUR をインストールしてください。
/etc/nginx/nginx.conf
のブロックの外側に、以下を追加:
load_module /usr/lib/nginx/modules/ngx_http_dav_ext_module.so;
server
ブロックに WebDAV の新しい location
を追加:
location /dav { root /srv/http; dav_methods PUT DELETE MKCOL COPY MOVE; dav_ext_methods PROPFIND OPTIONS; # Adjust as desired: dav_access all:rw; client_max_body_size 0; create_full_put_path on; client_body_temp_path /srv/client-temp; autoindex on; allow 192.168.178.0/24; deny all; }
上記の例では /srv/http/dav
と /srv/client-temp
ディレクトリが必要です。
バインドマウントを使って WebDAV で他のディレクトリにアクセスできるようにすることもできます。
rclone
rclone パッケージを インストール します。リモートまたはローカルディレクトリのエクスポートをサポートしています WebDAV を使う
認証なしで /srv/http
のコンテンツを提供するには:
$ rclone serve webdav /srv/http
Caddy
caddy-webdav-gitAUR パッケージを インストール するか、xcaddy-binAUR を使用して WebDAV モジュールで Caddy をビルドします。
$ xcaddy build --with github.com/mholt/caddy-webdav
ポート 80 を使用してパス dav
上の /srv/webdav
のコンテンツを提供するには、次を Caddyfile に追加します。
:80 { rewrite /dav /dav/ webdav /dav/* { root /srv/webdav prefix /dav } file_server }
次に Caddy を実行:
$ caddy run
クライアント
Cadaver
Cadaver は WebDAV 用のコマンドラインクライアントです。cadaver パッケージでインストールすることができます。
インストールしたら、WebDAV サーバーをテスト:
# cadaver http://localhost/dav dav:/dav/> mkcol test Creating `test': succeeded. dav:/dav/> ls Listing collection `/dav/': succeeded. Coll: test
Dolphin
Dolphin に永続的な WebDAV フォルダーを作成するには、場所サイドバーの リモート セクションで ネットワーク を選択し、ネットワークフォルダーの追加 ボタンを押します。ネットワークフォルダーウィザードが表示されます。WebFolder (webdav) を選択し、次のフォームに入力します。
または、パスバーをクリックして、webdav:// プロトコル指定子を含む URL を入力します。
Nautilus
Nautilus では、サーバーに接続 を選択し、dav://
または davs://
プロトコルを指定してアドレスを入力するだけです。
dav://127.0.0.1/dav
rclone
rclone は、WebDAV を含むリモートファイルシステムとの同期、または mount (多くのキャッシュ オプション付き) を可能にするコマンドラインツールです。
Thunar
Thunar の中で Ctrl+l
を押して dav あるいは davs プロトコルのアドレスを入力してください:
davs://webdav.yandex.ru
認証
使用することができるプロトコルは以下の通りです:
- plain
- digest
- others
Apache
htdigest(1) を使用します (ファイルが存在する場合は、-c
オプションを削除します):
# htdigest -c /etc/httpd/conf/passwd WebDAV username
プレーンな htpasswd(1) を使用します (ファイルが存在する場合は、-c
オプションを削除します。)
# htpasswd -c /etc/httpd/conf/passwd username
次に、認証を有効にするために httpd.conf
を編集する必要があります。1 つの方法は、すべての操作にユーザー foo
を要求することです。
<Directory "/home/httpd/html/dav"> DAV On AllowOverride None Options Indexes FollowSymLinks AuthType Digest # substitute "Basic" for "Digest" if you used htpasswd above AuthName "WebDAV" AuthUserFile /etc/httpd/conf/passwd Require user foo </Directory>
全員に読み取りを許可したい場合は、httpd.conf でこれを使用できます。
<Directory "/home/httpd/html/dav"> DAV On AllowOverride None Options Indexes FollowSymLinks AuthType Digest # substitute "Basic" for "Digest" if you used htpasswd above AuthName "WebDAV" AuthUserFile /etc/httpd/conf/passwd Require all granted <LimitExcept GET HEAD OPTIONS PROPFIND> Require user foo </LimitExcept> </Directory>
変更を加えた後は、httpd.service
を 再起動 することを忘れないでください。
トラブルシューティング
一部のファイルエクスプローラーで nginx WebDAV のディレクトリを編集できない
nginx WebDAV では、ディレクトリパスがスラッシュ (/
) で終わる必要がありますが、一部のファイルエクスプローラーはパスの最後に /
を追加しません。
これは、対応するチェック コード を削除して再コンパイルするか、次のコードを追加することで回避できます。必要に応じて、nginx server
ブロックにコードを記述して、リクエストの最後に /
を追加します。
# The configuration was based on: https://nworm.icu/post/nginx-webdav-dolphin-deken/ # if the request method is MKCOL or is to a directory, add / at the end of the request if it was missing if ($request_method = MKCOL) { rewrite ^(.*[^/])$ $1/ break; } if (-d $request_filename) { rewrite ^(.*[^/])$ $1/ break; } # if the request method is copy or move a directory, add / at the end of the request if it was missing set $is_copy_or_move 0; set $is_dir 0; if (-d $request_filename) { set $is_dir 1; } if ($request_method = COPY) { set $is_copy_or_move 1; } if ($request_method = MOVE) { set $is_copy_or_move 1; } set $is_rewrite "${is_dir}${is_copy_or_move}"; if ($is_rewrite = 11) { rewrite ^(.*[^/])$ $1/ break; }