记录一些常用的函数和瞎折腾的过程……

Nginx启用WebDav扩展

我想启用nginx的webdav来进行文件同步,网上查找一番,其实很简单,做个记录方便日后查看。

下载nginx的webdav模块,具体下载地址为:https://github.com/arut/nginx-dav-ext-module。

将下载的文件放到服务器上,我将其放在“/root/lnmp1.8/src/nginx-dav-ext-module”路径中。

按照github上说明,需要重新编译,且要添加编译选项:

$ ./configure --with-http_dav_module --add-module=/path/to/nginx-dav-ext-module

由于我使用的是lnmp一键安装包,在此环境中,我只需要打开lnmp.conf文件,找到Nginx_Modules_Options选项,在单引号中添加--with-http_dav_module --add-module=/root/lnmp1.8/src/nginx-dav-ext-module,具体如下:

Nginx_Modules_Options='--with-http_dav_module --add-module=/root/lnmp1.8/src/nginx-dav-ext-module'

最后进入lnmp的安装目录,执行如下更新命令即可:

./upgrade.sh nginx

安装好后,修改一下nginx的配置文件以启用WebDav,就可以通过域名访问webdav了,具体如下:

server {
  listen 80;
  server_name dav.example.com;
  root /path/to/dav.example.com;

  location /webdav {
    client_max_body_size 5G; # 最大允许上传文件大小
    alias /path/to/dav.example.com/webdav;
    index index.html;
    autoindex on;
    # autoindex_localtime on;
    set $dest $http_destination;

    # 对目录请求、对URI自动添加"/"
    if (-d $request_filename) {
      rewrite ^(.*[^/])$ $1/;
      set $dest $dest/;
    }

    # 对MOVE|COPY方法强制添加Destination请求头 
    if ($request_method ~ (MOVE|COPY)) {
      more_set_input_headers 'Destination: $dest'; 
    }
    if ($request_method ~ MKCOL) { 
      rewrite ^(.*[^/])$ $1/ break; 
    }

    # webdav config
    client_body_temp_path /tmp;
    dav_methods PUT DELETE MKCOL COPY MOVE; # DAV支持的请求方法
    dav_ext_methods PROPFIND OPTIONS LOCK UNLOCK; # DAV扩展支持的请求方法
    create_full_put_path on; # 启用创建目录支持
    dav_access group:rw all:r; # 创建文件的以及目录的访问权限
    auth_basic "user login";
    auth_basic_user_file /path/to/.htpasswd; # 账号密码文件
  }
}