最近毕设或是研究都看了很多论文,论文看了之后笔者习惯做一些笔记便于回顾,这些工作都是在 Zotero 上完成的,然而 Zotero 免费提供的云服务用来进行附件同步的话很快就会超出容量,看到 Zotero 支持 WebDav 之后,笔者便计划在自己的服务器上搭建 WebDav 服务来同步管理文献。
nginx 启用基本的 WebDav 只需要在编译配置的时候加上 --with-http_dav_module
即可启用基本的 WebDav 功能,这些基本的功能包括 PUT DELETE MKCOL COPY MOVE 等。然而,笔者希望配置的 WebDav 能够同时支持来自应用(Zotero)的操作,那么基本的 WebDav 功能就不够了。为此,需要额外安装 nginx-dav-ext-module
模块。
一、编译
按照 使用 Fast-CGI cache 优化 Nginx 加速 WordPress 站点 中安装 nginx 的顺序,在 configure 时新增参数:
--add-module=/path/to/nginx-dav-ext-module
(这里是静态模块,如果添加动态模块则换为 --add-dynamic-module
),重新编译 nginx 之后安装即可。
二、nginx 配置
笔者为 nginx 分配了一个与博客站点不同的域名,因此在 nginx 中单独使用一个配置文件来描述这个 WebDav 站点,由于WebDav 基于 HTTP 协议,因此同样适用 80 和 443 端口,这里,在未启用 SSL 时,可以先设置配置文件如下:
server {
listen 80;
listen [::]:80;
# webDav 站点的域名
server_name your.webdav.site.domain;
# 网站根目录,此处即为访问 webDav 的根目录
root /webDav/file/directory;
index index.html index.htm index.nginx-debian.html;
# nginx 提供的网站认证,与 WebDav 功能无关,非必需
auth_basic "Authenticated Users";
auth_basic_user_file /etc/nginx/.credentials.list;
location / {
# 启用 WebDav 的一些关键字
dav_methods PUT DELETE MKCOL COPY MOVE;
# 启用 WebDav 的一些扩展关键字用于支持应用访问
dav_ext_methods PROPFIND OPTIONS;
# 设置 WebDav 目录下新增文件的默认权限
dav_access user:rw group:rw all:r;
# 创建文件夹时自动创建路径上不存在的文件夹
create_full_put_path on;
# 设置报文最大长度便于文件传输,这里为8MB
client_max_body_size 8m;
# 让 nginx 自动生成索引页面,避免 403 错误
autoindex on;
}
}
一个简单的 WebDav 站点的配置如上,启用 WebDav 最关键的部分即在于 dav_
开头的三个关键字,它们分别启用了 WebDav 基本与扩展功能,并进行了简单的权限配置,同时要启用 autoindex
来防止 nginx 403 错误。
笔者在配置文件中还添加了用户身份验证, nginx 通过读取认证文件(包含了用户名和密码)来在访问网站时验证客户身份,添加一个用户与密码的方法也很简单:
# 添加一个用户,userName 为用户名
echo -n 'userName:' | sudo tee -a /etc/nginx/.credentials.list
# 设置用户的密码
openssl passwd -apr1 | sudo tee -a /etc/nginx/.credentials.list
三、添加 SSL
目前我们实现的 WebDav 网站可以正常运行了,但是只用了 80 端口,为了实现安全的加密传输,还需要配置 SSL。
配置 SSL 的过程并不需要特别修改 WebDav 的配置,和绝大部分网站配置 SSL 的过程相同,在 nginx 中新增 SSL 配置如下:
server {
listen 80;
listen [::]:80;
server_name your.webdav.site.domain;
# http 重定向至 https
rewrite ^(.*) https://$server_name$1 permanent;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name your.webdav.site.domain;
# 新增的 SSL 配置
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
ssl_ecdh_curve secp384r1;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off;
root /webDav/file/directory;
index index.html index.htm index.nginx-debian.html;
auth_basic "Authenticated Users";
auth_basic_user_file /etc/nginx/.credentials.list;
location / {
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS;
dav_access user:rw group:rw all:r;
create_full_put_path on;
client_max_body_size 8m;
autoindex on;
}
}
配置完成后就可以使用了,在 Zotero 客户端输入用户名与密码可以看到提示连接成功,从而方便地同步管理文献。
《nginx 配置 WebDav》上有1条评论