nginx で WebDAVを有効にする。
nginx の webdavの速度を試すのはありかも。 WebDAVはiOSからの唯一のデータ持ち出し手段だし。
webDAVの利点
現在のところ、SFTP/FTPSなどがiOSで手軽に使えなので、WebDAVがすべてのOSで一番手っ取り早いデータの同期方法である。
WebDAVはHTTPSであり認証機構もあるので、持っておいて損はないと思われる。
WebDAVを用意する。
nginx のwebDAVを探すと、debianではlibnginx-mod-http-dav-ext
が用意されていた。
sudo apt install libnginx-mod-http-dav-ext
インストールされたファイルを見てみる。
takuya@:~$ apt-file show libnginx-mod-http-dav-ext libnginx-mod-http-dav-ext: /usr/lib/nginx/modules/ngx_http_dav_ext_module.so libnginx-mod-http-dav-ext: /usr/share/doc/libnginx-mod-http-dav-ext/changelog.Debian.gz libnginx-mod-http-dav-ext: /usr/share/doc/libnginx-mod-http-dav-ext/copyright libnginx-mod-http-dav-ext: /usr/share/nginx/modules-available/mod-http-dav-ext.conf
なるほど、モジュールとして動的にロードされるようです。
通常のインデックスを設定する
最初に、nginx でインデックス(ファイル一覧)を表示するように設定
DAVのフォルダを用意する。
sudo mkdir /var/www/dav sudo chown www-data: /var/www/dav/ -R
BASIC認証をかけておく
index を仕掛けたフォルダに、DAVをメソッドとして追加していく。
location / { # 必要であれば設定 auth_basic "Enter Your ID/PW"; auth_basic_user_file /etc/nginx/sample.digest; # 標準搭載のメソッドと追加モジュール分のメソッドの設定 dav_methods PUT DELETE MKCOL COPY MOVE; dav_ext_methods PROPFIND OPTIONS; # ファイル一覧を表示する設定 autoindex on; autoindex_exact_size off; autoindex_localtime on; # 読み書きの権限設定 dav_access user:rw group:rw all:r; # 一時ファイル・ディレクトリ作成の許可 client_body_temp_path /var/www/.webdavtmp; create_full_put_path on; }
これで、DAVができるようになる。
認証方法
認証方式はなんでもいい。HTTPSを信用するならBASICでも構わない。
- BASIC/DIGESTなど
- lua など
- auth_request など
Authorization: Bearer
などをつかうには lua サポートでも入れてみるといい。
TLS証明書を書き換えられるようならもう何でもありだし。管理を楽にするために auth_request とかで gitlab とかに投げておいてもいいかもしれない。
BASIC/DIGEST認証の例
とりあえず、簡単にパスワード認証を入れておく。
ユーザ名とパスワードを生成する
apache のdigest auth 互換のパスワードを生成するには次のようにする。
USERNAME=sample PASSWORD=YOUR_PASSWORD echo "$USERNAME":$(openssl passwd -apr1 $PASSWORD)
パスワードを生成の機構について
openssl のところで、ハッシュ値を生成し、base64にしている。Apache互換に指定している。
openssl passwd -apr1 YOUR_PASS;
パスワードは固定で、HashのSALTが変更されるので、毎回違う値が出力される。 たとえば、10回実行すると次のようになる。
for i in {1..10}; do openssl passwd -apr1 test; done $apr1$E6eSjOuq$iAZUUfqiHJ8zv9qG38Shb1 $apr1$K.Wy7sYN$Ix0klhUCQfwcn4UAHSbRz/ $apr1$4DPLNUg0$QVbiHRIY7rAOPt870A3670 $apr1$e3QMPH5C$ua38IaGxo6NGZKIJsWmbZ/ $apr1$DtF4lp2X$/DdNlty6dpU2POQMu5uEL/ $apr1$nahkb2iJ$VZriMtEX.aYqxSbjwuAQF/ $apr1$r2iDLeWL$O.x94JXv81b2VJUu2K1eZ/ $apr1$NYVyiMwU$0MizU07qKCUavuFeKwihD/ $apr1$uwNYEWHO$4XpVQFvyDVcaf6pe5YAZj. $apr1$xfbKxmrJ$wMEaPWAC63RJdFpvUGFd/1
あとは、このパスワードをnginx に書いておけば共有サーバーの出来上がり
手軽なDAVサーバー
nextCloud など他ソフトウェアを経由しないので、簡単に作れる。Apacheでも良かったのだが、nginx でもできるのを確認した。
既設のnginxを使い回せるので楽ちんですね。