nginxでWebDAV

nginxでWebDAVを実装。nginx単体でもある程度のWebDAVは実現できるようですが、標準的なmethodが喋られなかったりしてクライアント側との整合性がよろしくありません。どうも別のモジュールを入れてあげる必要があるようです。

nginx-dev-ext-moduleをインストール

https://github.com/arut/nginx-dav-ext-module にあるのでcloneするなりダウンロードするなりしてソースを入手。
nginx側の開発環境でconfigureに -add-moduleをつけてコンパイル、リンク。さらにmake install。
ajpldapも入れているので、自環境ではこんな感じです。

$ ./configure --add-module=../nginx-dav-ext-module \
    --add-module=../nginx-auth-ldap \
    --add-module=../nginx_ajp_module \ 
    --with-http_ssl_module \
    --with-http_realip_module \
    --with-http_stub_status_module
$ make
# make install

nginx側設定

別の仮想ホストを作成して、別ポートでlisten。こんなです。認証の部分は昨日のエントリで書いたとおりldapへ認証を投げています。

server {
    listen 8080 ;
    server_name dav.example.com ;
    client_max_body_size 20M ;

    location / {
        root /usr/share/nginx/html ;
        charset utf-8;

        # 認証

        auth_ldap "intra static contents" ;
        auth_ldap_servers ad_1 ;

        autoindex on;
        autoindex_localtime on ;

        client_body_temp_path /usr/share/nginx/html ;
        create_full_put_path on;

        #WebDAV設定

        dav_access user:rw group:rw all:r ;
        dav_methods PUT DELETE MKCOL COPY MOVE ;
        dav_ext_methods PROPFIND OPTIONS ;

        access_log /var/log/nginx/webdav_access.log ;
        error_log /var/log/nginx/webdav_error.log ;
    }
}