Nginx 默认支持 WebDav,但 PROPFIND OPTIONS 等操作还不支持。如果需要在普通客户端打开,需要手动添加模块 nginx-dav-ext-module
Install
通过 nginx -V
获取目前本机 nginx 默认的编译参数
git clone https://github.com/arut/nginx-dav-ext-module
接着在 nginx 源码目录添加下面的编译参数
./configure \
...
--with-http_dav_module \
--add-module=../nginx-dav-ext-module
make
install
记得把原来的卸载清理干净,因为可能会使用一些原来 nginx 存在的模块,导致 nginx 异常
在 nginx.conf(/etc/nginx/nginx.conf) 中添加下面的一个新域名
server {
listen 80;
server_name xxx.com;
location / {
root /data/dav;
# alias /data/dav;
autoindex on;
dav_methods PUT DELETE MKCOL COPY MOVE;
# 需要 nginx-dav-ext-module 才有下面的选项
dav_ext_methods PROPFIND OPTIONS;
create_full_put_path on;
dav_access user:rw group:r all:r;
auth_basic "Authorized Users Only";
auth_basic_user_file /etc/nginx/htpasswd;
}
}
上面的配置中 auth_basic_user_file
需要用 htpasswd
生成用户库,之后重启即可
客户端
- 在浏览器直接访问
http://xxx.com
即可,提示用户名密码后,就可以访问。 - 使用 MacOS 的 Finder,Command+K,打开服务器连接,输入
http://xxx.com
,填入用户密码 - 使用专业的客户端: iOS 用
Coda.app
使用命令行操作 DAV 文件
把 stdin 转为二进制流传送到 DAV
echo 'bbb' | curl -X PUT -u username:password 'example.com/ii' --data-binary @-
cat file | ...
上传文件
curl -X PUT -u username:password 'example.com/ii' --data-binary @/home/user/filename
删除文件
curl -X DELETE -u yantze:password s.vastiny.com/filename
简单的写了一个脚本
#!/usr/bin/env bash
set -eu
# 三个行为:
# 一个参数,无流,参数为远程相对路径,获取文件内容
# 一个参数,读取流文件,参数为远程相对路径
# 两个参数,第一参数本地路径,第二参数远程相对路径
WEBDAV="http://xxx.com"
DAVUSER="username"
DAVPASS="password"
# Get file content
if [[ $# -eq 1 && -t 0 ]]; then
curl -su "$DAVUSER:$DAVPASS" "$WEBDAV/$1"
# Upload file
elif [[ $# -eq 1 && -n $1 ]]; then
curl -X PUT -u "$DAVUSER:$DAVPASS" "$WEBDAV/$1" --data-binary @-
echo "$WEBDAV/$1"
elif [[ $# -eq 2 && -n $1 && -n $2 ]]; then
LOCALFILE="$(\cd "$(\dirname "$1")" && \pwd)/$(\basename "$1")"
curl -X PUT -u "$DAVUSER:$DAVPASS" "$WEBDAV/$2" --data-binary @"$LOCALFILE"
echo "$WEBDAV/$2"
fi
使用示例
$ echo "example string" | pan ex1.txt
http://xxx.com/slid/ex1.txt
$ pan ex1.txt
example string
$ echo "example string2" > local_ex1.txt
$ pan local_ex1.txt ex1.txt
http://xxx.com/slid/local_ex1.txt
$ pan ex1.txt
example string2
更多 DAV 指令可以自行探索
用途
- 简单的加密网站
- 当作网盘使用
这样的设置 WebDav 一旦发现,容易被爆破,所以真的有价值的内容,可能需要再做进一步处理。
REF
- https://moongazer.me/2014/08/11/build-WebDAV-server-using-nginx/
- http://jameszhan.github.io/2015/02/25/setup-webdav-with-nginx-in-osx.html