为Nginx 添加 WebDAV 支持

在编译Nginx知道有”–with-http_dav_module”这么一个参数,但真正让我要在实际受用于这个功能,说出来有些出人意外–解决使用安卓手机通过SFTP访问Mac OS X的视频资源出现的卡顿问题。
WebDAV (Web-based Distributed Authoring and Versioning) 一种基于 HTTP 1.1协议的通信协议。它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可直接对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。(更多了解)
通过在编译时加入“–with-http_dav_module”可以启用对WebDav协议的支持,但要让功能完整,支持客户端的操作,还要引入另一个模块:ngx-dav-ext-module。关于对这个问题的描述,nginx官方文档有些轻描谈写:“WebDAV clients that require additional WebDAV methods to operate will not work with this module.”
下面是配置过程
下载ngx-dav-ext-module:

cd /usr/local/src && git clone –recursive ps://github.com/arut/nginx-dav-ext-module">https://github.com/arut/nginx-dav-ext-module

重新编译nginx:

./configure \
–prefix=/opt/webserver/nginx \
–without-http_memcached_module \
–user=www \
–group=www \
–with-http_image_filter_module \
–with-http_stub_status_module \
–with-http_ssl_module \
–with-http_gzip_static_module \
–with-openssl=/usr/local/src/openssl-1.0.1j \
–with-zlib=/usr/local/src/zlib-1.2.8 \
–with-pcre=/usr/local/src/pcre-8.36 \
–with-http_sub_module \
–add-module=/usr/local/src/nginx-accesskey-2.0.3 \
–add-module=/usr/local/src/ngx_http_geoip2_module \
–with-http_realip_module \
–with-http_mp4_module \
–with-http_dav_module \
–add-module=/usr/local/src/nginx-dav-ext-module

编译及备份:

#备份原nginx程序文件
mv /opt/webserver/nginx/sbin/nginx /opt/webserver/nginx/sbin/nginx.bak &&
\cp objs/nginx /opt/webserver/nginx/sbin/nginx &&
nginx -t

修改nginx.conf,大致如下:

 server { 
  listen 8080;
  server_name site.com;
  client_max_body_size 20M;
   location / {  
    dav_methods PUT DELETE MKCOL COPY MOVE;
   dav_ext_methods PROPFIND OPTIONS;
   dav_access group:rw all:r;
    root /var/www/dav/;
   auth_basic "Restricted";
   auth_basic_user_file /var/www/dav/.htpasswd;
    }
   }

关于认证加密,可以在这里生成,把生成的用户名密码按行写入指定的密码文件,比如上面的/var/www/dav/.htpasswd文件。

linux下为Nginx 添加 WebDAV 支持-nginx webdav
更新nginx:

阿里云-推广AD

linux下为Nginx 添加 WebDAV 支持-nginx webdav配置

#测试配置文件没有问题
nginx -t
#升级
make upgrade
 客户端测试

(1)Mac下建议使用Tramsmit:

可以上传下载修改文件了:

linux下为Nginx 添加 WebDAV 支持-nginx 禁用 webdav

 
(2)如果WebDAV未使用HTTPS协议,Windows7、Windows8是无法通过映射网络驱动器的方法进行挂载的。解决方法如下:
1、修改注册表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters,把BasicAuthLevel 值改成2,即同时支持http和https,默认只支持https,
2、然后重启服务:

net stop webclient
net start webclient

3、映射网络驱动器即可