Openresty + WebDav 配置记录
Openresty + WebDav 配置记录
由 CLAUDE 润色。
使用 OpenResty + hacdias/webdav 搭建 WebDAV 服务
本文介绍如何在已有 OpenResty 的服务器上搭建带 HTTPS 和账号认证的 WebDAV 服务。核心思路是:用 hacdias/webdav 作为后端,OpenResty 通过反代转发请求。
一、下载 hacdias/webdav
前往 hacdias/webdav Releases 选择对应架构的二进制包,以 linux-amd64 为例:
1
2
wget https://github.com/hacdias/webdav/releases/latest/download/linux-amd64-webdav.tar.gz
tar -xzf linux-amd64-webdav.tar.gz && mv webdav /usr/local/bin/
二、创建存储目录和专用用户
为 WebDAV 服务创建独立的系统用户,避免使用 nobody:
1
2
3
4
5
6
7
8
9
10
# 创建无登录 shell 的专用用户
useradd -r -s /usr/sbin/nologin -d /opt/webdav webdav
# 创建存储目录并设置权限
mkdir -p /opt/webdav
chmod 750 /opt/webdav
chmod g+s /opt/webdav
chown -R webdav:webdav /opt/webdav
setfacl -R -d -m other::0 /opt/webdav
mkdir -p /opt/webdav/data
三、配置 hacdias/webdav
1
2
3
4
5
6
7
8
9
10
11
mkdir -p /etc/webdav
cat <<EOF > /usr/local/etc/webdav/config.yaml
address: 127.0.0.1
port: 6065
# 认证由 OpenResty 的 auth_basic 负责,这里关闭
auth: false
directory: /opt/webdav/data
permissions: CRUD
EOF
auth: false表示 WebDAV 后端本身不做认证,认证完全交给前面的 OpenResty 处理,外部无法直接访问127.0.0.1:6065。
四、配置 systemd 服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cat <<EOF > /etc/systemd/system/webdav.service
[Unit]
Description=WebDAV Server
After=network.target
[Service]
ExecStart=/usr/local/bin/webdav --config /usr/local/etc/webdav/config.yaml
Restart=on-failure
User=webdav
Group=webdav
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now webdav
systemctl status webdav
五、申请 SSL 证书
使用常用的 certbot 即可,
六、创建 Basic Auth 密码文件
1
2
3
4
5
6
7
8
9
10
dnf install -y httpd-tools
# 创建第一个用户(-c 新建文件)
htpasswd -c /usr/local/openresty/.htpasswd youruser
# 添加更多用户(去掉 -c)
# htpasswd /usr/local/openresty/.htpasswd anotheruser
# 设置权限
chmod 640 /usr/local/openresty/.htpasswd
七、配置 OpenResty
创建配置文件,这里只展示反代部分。
推荐使用 Nginx 配置工具生成基础配置。
1
2
mkdir -p /usr/local/openresty/nginx/conf/conf.d
vi /usr/local/openresty/nginx/conf/conf.d/webdav.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# HTTP → HTTPS 跳转
server {
listen 80;
server_name xxx;
location / {
return 301 https://$host$request_uri;
}
}
# HTTPS WebDAV 主服务
server {
listen 443 ssl;
http2 on;
server_name xxx;
location / {
# Basic Auth 认证
auth_basic "WebDAV";
auth_basic_user_file /usr/local/openresty/.htpasswd;
# 反代到 hacdias/webdav 后端
proxy_pass http://127.0.0.1:6065;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass_request_headers on;
# 大文件支持,关闭请求缓冲直接流式转发
client_max_body_size 0;
client_body_timeout 600s;
send_timeout 600s;
proxy_request_buffering off;
}
}
80 和 443 端口与博客共享,nginx 通过
server_name自动区分流量,博客配置无需改动。
检查配置并重载:
1
openresty -t && openresty -s reload
八、验证
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
export WEBDAV_URL="https://xxx"
export WEBDAV_USER="youruser"
export WEBDAV_PASS="yourpassword"
# PROPFIND
curl -u $WEBDAV_USER:$WEBDAV_PASS -X PROPFIND "$WEBDAV_URL/" -H "Depth: 1" -v
# 上传文件,返回 Created
curl -u $WEBDAV_USER:$WEBDAV_PASS -T /etc/hostname "$WEBDAV_URL/test.txt"
# 下载文件
curl -u $WEBDAV_USER:$WEBDAV_PASS "$WEBDAV_URL/test.txt"
# 未认证访问
curl -I "$WEBDAV_URL/"
This post is licensed under CC BY 4.0 by the author.