それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

nginx で WebDAVを有効にする。

nginx で WebDAVを有効にする。

nginx の webdavの速度を試すのはありかも。 WebDAViOSからの唯一のデータ持ち出し手段だし。

webDAVの利点

現在のところ、SFTP/FTPSなどがiOSで手軽に使えなので、WebDAVがすべてのOSで一番手っ取り早いデータの同期方法である。

WebDAVHTTPSであり認証機構もあるので、持っておいて損はないと思われる。

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を使い回せるので楽ちんですね。