はじめに
この記事はdebian系列(Ubuntu系列)をベースに解説しています。
WebDAVのメソッドはnginxの標準debパッケージにも搭載されていますが、一部機能のメソッド(PROPFIND,OPTIONS)がなく、一部アプリではうまく動作しなかったりするのでそのメソッドを追加するための記事を書いてます。
※nginx公式のリポジトリを追加していることが前提です。
記事に書いてある*にはバージョンが入ります。
ビルド
デフォルトのモジュールには搭載されていないため、モジュールを追加してnginxをビルドをする必要があります。
ソースコードを入手
aptコマンドでnginxのソースコードを取り寄せます。
ディレクトリは特に問いませんが、/usr/src/
あたりに置いておくといいでしょう。
# apt source nginx
取り寄せが終わるとカレントディレクトリにソースコード(nginx-*.*.*
)が置かれます。
ビルド依存パッケージのインストール
ソースルートディレクトリのdebian/control
っていうファイルのBuild-dependsに依存パッケージが書かれているのでそれを頼りにインストールします。
なお、今回インストールしたバージョン(1.16.1)の依存パッケージは以下のとおりです。
# apt install debhelper dh-systemd dpkg-dev quilt lsb-release libssl-dev libpcre3-dev zlib1g-dev
※build-essential
も入れておくと無難です。
WebDAV拡張モジュールの取り込み
ソースルートディレクトリで以下のコマンドを実行します。
# git clone https://github.com/arut/nginx-dav-ext-module.git
そのあと、debパッケージにするために少しだけ内容を変更します。
# 省略
# 39~41行目付近
config.status.nginx: config.env.nginx
cd $(BUILDDIR_nginx) && \
# 最後の方に" --add-module=/path/to/nginx-*.*.*/nginx-dav-ext-module "を追加。
# ディレクトリは適宜変更。
CFLAGS="" ./configure --prefix=/etc/nginx ... --add-module=/path/to/nginx-*.*.*/nginx-dav-ext-module
touch $@
# 44~46行目付近
config.status.nginx_debug: config.env.nginx_debug
cd $(BUILDDIR_nginx_debug) && \
# 上と同様のものを追加。
CFLAGS="" ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx ... --add-module=/path/to/nginx-*.*.*/nginx-dav-ext-module
touch $@
# (省略)
ビルドタイム
これを実行してあとは待つだけです。
# dpkg-buildpackage -uc -b
無事に終わるとdebパッケージがソースルートディレクトリの1つ上にできます。
インストールして確認
あとはできたものをdpkgでインストールするだけです。
# dpkg -i nginx_*.*.*_*.deb
インストールが終わったら以下のコマンドを実行して確認します。
$ nginx -V
configure arguments
に--with-http_dav_module
と--add-module=/path/to/nginx-*.*.*/nginx-dav-ext-module
が入っていれば完了です。
設定する
大まかな設定は割愛します。任意で変更してください。
location / {
# 必要であれば設定
# auth_basic "Authorize dialog message";
# auth_basic_user_file /path/to/.htpasswd;
# 標準搭載のメソッドと追加モジュール分のメソッドの設定
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;
}
nginx再起動して、おしまい。