「WebDAV」の版間の差分
(同期) |
Kusanaginoturugi (トーク | 投稿記録) (校正(でき・出来)) |
||
| (2人の利用者による、間の9版が非表示) | |||
| 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]] や [[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 によるファイル転送を提供します。 |
||
| − | この記事では |
+ | この記事では[[:Category:ウェブサーバー|ウェブサーバー]]を使ってシンプルな WebDAV を設定します。 |
| + | == サーバー == |
||
| − | [[en2:File Sharing with Webdav and DNSSD|Webdav と DNSSD によるファイル共有]]も参照。 |
||
| − | == |
+ | === Apache === |
[[Apache HTTP Server]] をインストールしてください。 |
[[Apache HTTP Server]] をインストールしてください。 |
||
| 34行目: | 37行目: | ||
}} |
}} |
||
| − | + | ディレクトリを作成: |
|
# mkdir -p /home/httpd/DAV |
# mkdir -p /home/httpd/DAV |
||
| − | DavLockDB のディレクトリのパーミッションを |
+ | DavLockDB のディレクトリのパーミッションを変更し、{{ic|http}} ユーザーにより書き込みができるようにします: |
| − | # chown -R http:http /home/httpd/DAV |
+ | # chown -R http:http /home/httpd/DAV |
| − | |||
# mkdir -p /home/httpd/html/dav |
# mkdir -p /home/httpd/html/dav |
||
# chown -R http:http /home/httpd/html/dav |
# chown -R http:http /home/httpd/html/dav |
||
| + | ===Nginx=== |
||
| − | == クライアント (Cadaver) == |
||
| − | + | メインライン版の [[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}} パッケージでインストールすることができます。 |
||
| + | インストールしたら、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}} は |
+ | {{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行目: | ||
}} |
}} |
||
| − | 変更を加えた後は |
+ | 変更を加えた後は、{{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 プロトコルを用いて読み書きできる方法の拡張からなります。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; }