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

Nginx启用WebDav扩展

提醒:本文最后更新于 1027 天前,文中所描述的信息可能已发生改变,请谨慎使用。

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

nginx本已集成了webdav模块(官方介绍:http://nginx.org/en/docs/http/ngx_http_dav_module.html),但这还不够,还需要下载nginx的webdav扩展模块,以便使用dav_ext_methods方法,具体下载地址为:https://github.com/arut/nginx-dav-ext-module。

下载项目:

wget https://github.com/arut/nginx-dav-ext-module/archive/refs/tags/v3.0.0.tar.gz

将下载的文件解压到服务器指定位置,我将其解压到“/root/lnmp1.8/src”路径中:

tar -zxvf v3.0.0.tar.gz -C /root/lnmp1.8/src

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

$ ./configure --with-http_dav_module --add-module=/root/lnmp1.8/src/nginx-dav-ext-module-3.0.0

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

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

最后进入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; # 最大允许上传文件大小
    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 user:rw group:rw all:r; # 创建文件的以及目录的访问权限
    auth_basic "user login";
    auth_basic_user_file /path/to/.htpasswd; # 账号密码文件
  }
}

如果要在网站的二级目录开启webdav功能,则在网站的配置文件增加如下配置:

location /webdav {         # 定义开启webdav功能的目录
  client_max_body_size 5G; # 最大允许上传文件大小
  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 user:rw group:rw all:r; # 创建文件的以及目录的访问权限
  auth_basic "user login";
  auth_basic_user_file /path/to/.htpasswd; # 账号密码文件
}