yumで入れたnginxのWebDAVへは接続できない
普通に「nginx webdav」でググって出てくるような方法ではMacのFinderからさくっと接続……とはいかない。例えば
server {
listen 443 default ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/webdav.endaaman.me.crt;
ssl_certificate_key /etc/nginx/ssl/webdav.endaaman.me.key;
server_name webdav.endaaman.me;
location / {
root /var/webdav;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
client_max_body_size 1000m;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
client_body_temp_path /tmp/webdav;
create_full_put_path on;
dav_access group:r all:r;
dav_methods PUT DELETE MKCOL COPY MOVE;
access_log /var/log/nginx/webdav.access.log;
error_log /var/log/nginx/webdav.error.log;
}
}
こんな感じの設定にする。そんで、ブラウザからhttps://webdav.endaaman.me
に入ってBASIC認証すれば普通にファイルが見られる。ここまではいい。ただMacのFinderの「サーバへ接続」からアクセスすると
な感じで怒られる。よくよくnginxのログを見てみると
36.2.153.169 - **** [22/Jul/2015:01:34:04 +0900] "OPTIONS / HTTP/1.1" 405 172 "-" "WebDAVLib/1.3"
という感じでOPTIONSメソッドを弾いている。詳しいことは分からないが、MacのFinderはOPTIONSメソッドを使うが、nginxで普通に使えるWebDAVモジュールではOPTIONSメソッドがサポートされていないので、接続がそこで弾かれているようである。
### OPTIONSメソッドに対応するにはnginx-dav-ext-moduleが必要になる こいつを導入した上で、confファイルのlocationディレクティブに
dav_ext_methods PROPFIND OPTIONS;
の一行を追加すればいいようである。ただし当然、このモジュールはyum install nginx
でインストールしたnginxには入ってない。なのでnginxのソースをコンパイルしてインストールする必要がある。
nginxのソースからインストールする
rpm-build
を使う手もあったが却って面倒くさくなりそうなので、ソースからインストールする。そもそもnginx自体が「各自細かく./configure
オプションを設定して使ってくれ」という空気をかなり醸しているので、それに従う方が無難だろう。
これを書いている時の最新は1.9.3だったが、一応最新のSTABLEである1.8.0を使う。
$ wget http://nginx.org/download/nginx-1.8.0.tar.gz
$ tar xf nginx-1.8.0.tar.gz
$ git clone https://github.com/arut/nginx-dav-ext-module.git
$ cd nginx-1.8.0
すでにnginxをyumで入れてるなら、先に
$ nginx -V
をしてどこかにコピっておく。そして肝心の./configure
。
$ ./configure \
--prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-mail \
--with-mail_ssl_module \
--with-file-aio \
--with-ipv6 \
--with-http_spdy_module \
--add-module=./nginx-dav-ext-module
yumで入れたnginxのnginx -V
のオプションに、nginx-dav-ext-module
を有効にする--add-module=../nginx-dav-ext-module
を追加して、--with-cc-opt
と--param
を抜いて、path周りはデフォルト(/usr/local/
)にするとこんな感じ。
そんで、先にyumでnginxを入れてたならconfやらのバックアップしてsudo yum erase nginx
してから、
$ make
$ sudo make install
でインストール。最初のconfに足りなかった
dav_ext_methods PROPFIND OPTIONS;
を追加してnginxを起動すれば、MacのFinderから接続可能となるはずだ。