WebDAV(Web-based Distributed Authoring and Versioning)是基于 HTTP/1.1 的一个通信协议。它为 HTTP/1.1 添加了一些扩展(就是在 GET、POST、HEAD 等几个 HTTP 标准方法以外添加了一些新的方法),使得应用程序可以直接将文件写到 Web Server 上,并且在写文件时候可以对文件加锁,写完后对文件解锁,还可以支持对文件所做的版本控制。这个协议的出现极大地增加了 Web 作为一种创作媒体对于我们的价值。基于 WebDAV 可以实现一个功能强大的内容管理系统或者配置管理系统。

安装Nginx并配置WebDAV模块

最新的Nginx已经默认支持了webdav模块了,但是支持并不完善,对于PROPFIND OPTIONS还不支持,必须安装WebDAV的扩展模块

git clone https://github.com/arut/nginx-dav-ext-module.git /tmp/nginx-dav-ext-module

手动编译和安装Nginx

wget http://nginx.org/download/nginx-1.8.0.tar.gz --directory-prefix=/tmp/
cd /tmp && tar -xzf nginx-1.8.0.tar.gz
cd /tmp/nginx-1.8.0
./configure --prefix=/usr/local/nginx --add-module=/tmp/nginx-dav-ext-module --with-http_ssl_module --with-pcre --with-ipv6 --sbin-path=/usr/local/nginx/bin/nginx --conf-path=/usr/local/etc/nginx/nginx.conf --pid-path=/usr/local/var/run/nginx.pid --lock-path=/usr/local/var/run/nginx.lock --http-client-body-temp-path=/usr/local/var/run/nginx/client_body_temp --http-proxy-temp-path=/usr/local/var/run/nginx/proxy_temp --http-fastcgi-temp-path=/usr/local/var/run/nginx/fastcgi_temp --http-uwsgi-temp-path=/usr/local/var/run/nginx/uwsgi_temp --http-scgi-temp-path=/usr/local/var/run/nginx/scgi_temp --http-log-path=/usr/local/var/log/nginx/access.log --error-log-path=/usr/local/var/log/nginx/error.log --with-http_gzip_static_module --with-http_dav_module --with-debug --with-http_gunzip_module
make && make install

通过Homebrew安装nginx-full

brew unlink nginx
brew tap homebrew/nginx
brew install nginx-full --with-debug --with-gunzip ---with-http2 --with-passenger --with-webdav --with-dav-ext-module

通过Homebrew安装Nginx

在安装前需要修改Homebrew配置文件/usr/local/Library/Formula/nginx.rb,在参数中加入nginx-dav-ext-module。

args = %W[
    --prefix=#{prefix}
    --with-http_ssl_module
    --with-pcre
    --with-ipv6
    --sbin-path=#{bin}/nginx
    --with-cc-opt=#{cc_opt}
    --with-ld-opt=#{ld_opt}
    --conf-path=#{etc}/nginx/nginx.conf
    --pid-path=#{var}/run/nginx.pid
    --lock-path=#{var}/run/nginx.lock
    --http-client-body-temp-path=#{var}/run/nginx/client_body_temp
    --http-proxy-temp-path=#{var}/run/nginx/proxy_temp
    --http-fastcgi-temp-path=#{var}/run/nginx/fastcgi_temp
    --http-uwsgi-temp-path=#{var}/run/nginx/uwsgi_temp
    --http-scgi-temp-path=#{var}/run/nginx/scgi_temp
    --http-log-path=#{var}/log/nginx/access.log
    --error-log-path=#{var}/log/nginx/error.log
    --with-http_gzip_static_module
    --add-module=/tmp/nginx-dav-ext-module
]
brew install nginx --with-debug --with-gunzip --with-libressl --with-passenger --with-spdy --with-webdav

配置和启动WebDAV服务

生成auth认证配置文件

htpasswd -c /u/etc/nginx/user.passwd admin
htpasswd /u/etc/nginx/user.passwd james
htpasswd /u/etc/nginx/user.passwd guest

在配置文件/usr/local/etc/nginx/nginx.conf加入如下配置:

# WebDAV
server {
    listen 9876;
    error_page 404 /404;
    error_page 503 /503;

    location / {
        root /u/var/webdav;
        dav_methods PUT DELETE MKCOL COPY MOVE;
        dav_ext_methods PROPFIND OPTIONS;
        create_full_put_path on;
        dav_access user:rw group:rw all:r;

        auth_basic "Authorized Users Only";
        auth_basic_user_file /u/etc/nginx/user.passwd;
    }
}

点此可以查看详细的配置参考。

启动Nginx

nginx

访问WebDAV服务

作为静态文件服务器

open -a "Google Chrome" http://127.0.0.1:9876/index.html

或者

cadaver http://127.0.0.1:9876

作为网盘

在Finder下,按快捷键Command+K打开Connect to Server窗口。

Connect to Server