Nginx启用WebDav扩展
我想启用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; # 账号密码文件
}