「WebDAV」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
 
(校正(でき・出来))
 
(2人の利用者による、間の12版が非表示)
1行目: 1行目:
[[Category:ネットワーク]]
+
[[Category:WebDAV]]
 
[[en:WebDAV]]
 
[[en:WebDAV]]
  +
{{Related articles start}}
WeBDAV ('''Web''' '''D'''istributed '''A'''uthoring and '''V'''ersioning) は HTTP 1.1の拡張でありプロトコルとも言えます。WebDAV は HTTP 1.1 プロトコルを用いて読み書きできる方法の拡張からなります。[[NFS|NFS]] や [[Samba|SMB]] の代わりに、WebDAV は HTTP によるファイル転送を提供します。
 
  +
{{Related|Davfs2}}
  +
{{Related articles end}}
  +
'''WebDAV''' (Web Distributed Authoring and Versioning) は HTTP 1.1の拡張でありプロトコルとも言えます。WebDAV は HTTP 1.1 プロトコルを用いて読み書きできる方法の拡張からなります。[[NFS]] や [[Samba|SMB]] の代わりに、WebDAV は HTTP によるファイル転送を提供します。
   
この記事では、Apache を使ってシンプルな WebDAV を設定することが目標です。
+
この記事では[[:Category:ウェブサーバー|ウェブサーバー]]を使ってシンプルな WebDAV を設定しま
   
  +
== サーバー ==
[[File Sharing with Webdav and DNSSD]] も参照。
 
   
== サーバー (Apache) ==
+
=== Apache ===
[[Apache HTTP Server|Apache HTTP Server]] をインストールしてください。
+
[[Apache HTTP Server]] をインストールしてください。
   
そして WebDAV を有効化ます。DAV のモジュールをアンコメント:
+
そして WebDAV を有効化ます。DAV のモジュールをアンコメント:
 
{{bc|
 
{{bc|
 
LoadModule dav_module modules/mod_dav.so
 
LoadModule dav_module modules/mod_dav.so
34行目: 37行目:
 
}}
 
}}
   
=== ディレクトリを作成 ===
+
ディレクトリを作成:
   
 
# mkdir -p /home/httpd/DAV
 
# mkdir -p /home/httpd/DAV
   
DavLockDB のディレクトリのパーミッションを確認、apache ユーザー (http) により書き込みができることを確認します:
+
DavLockDB のディレクトリのパーミッションを変更、{{ic|http}} ユーザーにより書き込みができるようにします:
# chown -R http:http /home/httpd/DAV # Otherwise you wouldn't be able to upload files
+
# chown -R http:http /home/httpd/DAV
 
 
# mkdir -p /home/httpd/html/dav
 
# mkdir -p /home/httpd/html/dav
# chown -R nobody.nobody /home/httpd/html/dav
+
# chown -R http:http /home/httpd/html/dav
  +
  +
===Nginx===
  +
メインライン版の [[nginx]] と {{AUR|nginx-mainline-mod-dav-ext}} をインストールしてください。
  +
  +
{{ic|/etc/nginx/nginx.conf}} のブロックの外側に、以下を追加:
  +
{{bc|
  +
load_module /usr/lib/nginx/modules/ngx_http_dav_ext_module.so;
  +
}}
  +
  +
{{ic|server}} ブロックに WebDAV の新しい {{ic|location}} を追加:
  +
{{bc|
  +
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;
  +
}
  +
}}
  +
  +
上記の例では {{ic|/srv/http/dav}} と {{ic|/srv/client-temp}} ディレクトリが必要です。
  +
  +
バインドマウントを使って WebDAV で他のディレクトリにアクセスできるようにすることもできます。
  +
  +
=== rclone ===
  +
  +
{{Pkg|rclone}} パッケージを [[インストール]] します。リモートまたはローカルディレクトリのエクスポートをサポートしています [https://rclone.org/commands/rclone_serve_webdav/ WebDAV を使う]
  +
  +
認証なしで {{ic|/srv/http}} のコンテンツを提供するには:
  +
  +
$ rclone serve webdav /srv/http
  +
  +
=== Caddy ===
  +
  +
{{AUR|caddy-webdav-git}} パッケージを [[インストール]] するか、{{AUR|xcaddy-bin}} を使用して WebDAV モジュールで [[Caddy]] をビルドします。
  +
  +
$ xcaddy build --with github.com/mholt/caddy-webdav
  +
  +
ポート 80 を使用してパス {{ic|dav}} 上の {{ic|/srv/webdav}} のコンテンツを提供するには、次を [[Caddy#設定|Caddyfile]] に追加します。
  +
  +
:80 {
  +
rewrite /dav /dav/
  +
webdav /dav/* {
  +
root /srv/webdav
  +
prefix /dav
  +
}
  +
file_server
  +
}
  +
  +
次に [[Caddy#使用方法|Caddy を実行]]:
  +
  +
$ caddy run
  +
  +
== クライアント ==
  +
  +
=== Cadaver ===
   
  +
Cadaver は WebDAV 用のコマンドラインクライアントです。{{Pkg|cadaver}} パッケージでインストールすることができます。
== クライアント (Cadaver) ==
 
Cadaver は WebDAV 用のコマンドラインクライアントです。[[公式リポジトリ]]の {{Pkg|cadaver}} パッケージでインストールすることができます。
 
   
  +
インストールしたら、WebDAV サーバーをテスト:
=== テスト ===
 
 
# cadaver http://localhost/dav
 
# cadaver http://localhost/dav
 
dav:/dav/> mkcol test
 
dav:/dav/> mkcol test
54行目: 120行目:
 
Listing collection `/dav/': succeeded.
 
Listing collection `/dav/': succeeded.
 
Coll: test
 
Coll: test
dav:/dav/> exit
 
   
  +
=== Dolphin ===
上記のように表示されれば成功です。
 
  +
  +
[[Dolphin]] に永続的な WebDAV フォルダーを作成するには、場所サイドバーの ''リモート'' セクションで ''ネットワーク'' を選択し、''ネットワークフォルダーの追加'' ボタンを押します。ネットワークフォルダーウィザードが表示されます。''WebFolder (webdav)'' を選択し、次のフォームに入力します。
  +
  +
または、パスバーをクリックして、''webdav://'' プロトコル指定子を含む URL を入力します。
  +
  +
=== Nautilus ===
  +
  +
[[Nautilus]] では、''サーバーに接続'' を選択し、{{ic|dav://}} または {{ic|davs://}} プロトコルを指定してアドレスを入力するだけです。
  +
  +
dav://127.0.0.1/dav
  +
  +
{{Note|{{ic|dav://}} で ''HTTP Error: Moved permanently nautilus'' が発生した場合は、代わりにプロトコルとして {{ic|davs://}} を使用してみてください。}}
  +
  +
=== rclone ===
  +
  +
{{Pkg|rclone}} は、WebDAV を含むリモートファイルシステムとの同期、または [https://rclone.org/commands/rclone_mount/ mount] (多くのキャッシュ オプション付き) を可能にするコマンドラインツールです。
  +
  +
=== Thunar ===
  +
  +
[[Thunar]] の中で {{ic|Ctrl+l}} を押して ''dav'' あるいは ''davs'' プロトコルのアドレスを入力してください:
  +
  +
davs://webdav.yandex.ru
   
 
== 認証 ==
 
== 認証 ==
ディレクトリの表示と dav アクセスができるようにパーミッションを追加します。ssl アクセスのみにディレクトリを制限したほうがいいかもしれません。
 
   
以下は使用することができるプロトコルです:
+
使用することができるプロトコルは以下の通りです:
 
* plain
 
* plain
 
* digest
 
* digest
 
* others
 
* others
   
  +
=== Apache ===
以下に2つの例を示します。{{ic|foo}} はユーザ名です:
 
   
  +
{{man|1|htdigest}} を使用します (ファイルが存在する場合は、{{ic|-c}} オプションを削除します):
digest を使う:
 
# basic form: htdigest -c /path/to/file AuthName username
 
htdigest -c /etc/httpd/conf/passwd WebDAV foo
 
   
  +
# htdigest -c /etc/httpd/conf/passwd WebDAV ''username''
{{Note|digest 認証が {{ic|httpd.conf}} で有効になっているか次のエントリが存在するかで確認してください: {{ic|LoadModule auth_digest_module modules/mod_auth_digest.so}}。}}
 
   
  +
{{Note|{{ic|httpd.conf}} に次のエントリが存在することでダイジェスト認証が有効になっていることを確認できます: {{ic|LoadModule auth_digest_module modules/mod_auth_digest.so}}}}
plain を使う:
 
  +
# basic form: htpasswd -c /path/to/file username
 
  +
プレーンな {{man|1|htpasswd}} を使用します (ファイルが存在する場合は、{{ic|-c}} オプションを削除します。)
htpasswd -c /etc/httpd/conf/passwd foo
 
  +
  +
# htpasswd -c /etc/httpd/conf/passwd ''username''
  +
  +
次に、認証を有効にするために {{ic|httpd.conf}} を編集する必要があります。1 つの方法は、すべての操作にユーザー {{ic|foo}} を要求することです。
   
次に、{{ic|httpd.conf}} を編集して認証を有効にしてください。ひとつの方法はユーザー {{ic|foo}} に全てを必要とさせることです:
 
 
{{bc|
 
{{bc|
 
<Directory "/home/httpd/html/dav">
 
<Directory "/home/httpd/html/dav">
91行目: 178行目:
 
}}
 
}}
   
{{Note|{{ic|AuthName}} は digest 認証のときに {{ic|htdigest}} コマンド使った同じである必要があります。basic/plain 認証の場合、この行は削除できます。また、{{ic|AuthUserFile}} パスが上記の {{ic|htdigest}} {{ic|htpasswd}} で使用したパスと一致ようにしてください。}}
+
{{Note|{{ic|AuthName}} は、ダイジェスト認証に {{ic|htdigest}} コマンド使用するときに渡されるレルム名と一致する必要があります。基本/単純認証の場合、この行は削除される可能性があります。また、{{ic|AuthUserFile}} パスが上記の {{ic|htdigest}} または {{ic|htpasswd}} コマンドで使用したものと一致していことを確認してください。}}
  +
  +
全員に読み取りを許可したい場合は、httpd.conf でこれを使用できます。
   
ディレクトリが誰からでも読み込みできるようにするには、{{ic|httpd.conf}} に以下を記述します:
 
 
{{bc|
 
{{bc|
 
<Directory "/home/httpd/html/dav">
 
<Directory "/home/httpd/html/dav">
109行目: 197行目:
 
}}
 
}}
   
変更を加えた後は必ず apache を再起動してください:
+
変更を加えた後は、{{ic|httpd.service}} [[再起動]] することを忘れないでください
  +
# systemctl restart httpd
 
  +
{{Note|Apache で 405 エラーが発生した場合は、{{ic|Directory}} セクションに {{ic|DirectoryIndexdisabled}} を追加してください。}}
  +
  +
== トラブルシューティング ==
  +
  +
=== 一部のファイルエクスプローラーで nginx WebDAV のディレクトリを編集できない ===
  +
  +
nginx WebDAV では、ディレクトリパスがスラッシュ ({{ic|/}}) で終わる必要がありますが、一部のファイルエクスプローラーはパスの最後に {{ic|/}} を追加しません。
  +
  +
これは、対応するチェック [https://github.com/nginx/nginx/blob/master/src/http/modules/ngx_http_dav_module.c コード] を削除して再コンパイルするか、次のコードを追加することで回避できます。必要に応じて、nginx {{ic|server}} ブロックにコードを記述して、リクエストの最後に {{ic|/}} を追加します。
  +
  +
{{bc|1=# 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;
  +
}
  +
}}

2024年7月10日 (水) 20:41時点における最新版

関連記事

WebDAV (Web Distributed Authoring and Versioning) は HTTP 1.1の拡張でありプロトコルとも言えます。WebDAV は HTTP 1.1 プロトコルを用いて読み書きできる方法の拡張からなります。NFSSMB の代わりに、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

メインライン版の nginxnginx-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
ノート: dav://HTTP Error: Moved permanently nautilus が発生した場合は、代わりにプロトコルとして davs:// を使用してみてください。

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
ノート: httpd.conf に次のエントリが存在することでダイジェスト認証が有効になっていることを確認できます: LoadModule auth_digest_module modules/mod_auth_digest.so

プレーンな 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>
ノート: AuthName は、ダイジェスト認証に htdigest コマンドを使用するときに渡されるレルム名と一致する必要があります。基本/単純認証の場合、この行は削除される可能性があります。また、AuthUserFile パスが、上記の htdigest または htpasswd コマンドで使用したものと一致していることを確認してください。

全員に読み取りを許可したい場合は、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再起動 することを忘れないでください。

ノート: Apache で 405 エラーが発生した場合は、Directory セクションに DirectoryIndexdisabled を追加してください。

トラブルシューティング

一部のファイルエクスプローラーで 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;
}