用户工具

站点工具


xnix:nginx_webdav

这是本文档旧的修订版!


搭建一个简单的 nginx webdav (FreeBSD)

功能简介

  • 基于FreeBSD ports的nginx
  • 多存储空间
  • 用户验证

配置

FreeBSD Ports 编译

需要选上 HTTP_DAV, 第三方的 HEADERS_MORE 和 HTTP_DAV_EXT 模块

目录结构 及 变量

请自行修改以下路径

  • /logs/ 日志存储目录
  • /ssl/ SSL证书目录
  • /webdav/ webdav主目录
  • /webdav/root/ webdav多存储目录
  • /webdav/auth/ basic auth用户验证 (htpasswd 格式)
  • /webdav/temp/ 上传文件的临时目录
  • webdav.example.com 为泛域名的基础域名

nginx.conf

加载模块

load_module	/usr/local/libexec/nginx/ngx_http_dav_ext_module.so;
load_module	/usr/local/libexec/nginx/ngx_http_headers_more_filter_module.so;

vhosts 设置

dav_ext_lock_zone	zone=dav:10m;
server {
	server_name	~^(.*)\.webdav\.example\.com$;
	listen		443 ssl http2;
	listen		[::]:443 ssl http2;
	access_log	/logs/webdav.example.com.log;

	set		$webdav_path /webdav;
	set		$webdav_root $webdav_path/root/$1;
	set		$webdav_auth $webdav_path/auth/$1;
	root		$webdav_root;

	if ( !-d $webdav_root ) {
		return 404;
	}
	if ( !-f $webdav_auth ) {
		return 404;
	}

	ssl_certificate		/ssl/fullchain.pem;
	ssl_certificate_key	/ssl/privkey.pem;
	ssl_stapling		on;
	ssl_stapling_verify	on;

	autoindex		on;
	autoindex_exact_size	on;
	autoindex_localtime	on;
	charset			utf-8;
	client_body_temp_path	/webdav/temp;
	client_max_body_size	0;
	create_full_put_path	on;
	gzip			off;
	send_timeout		3600;
	client_body_timeout	3600;
	lingering_timeout	3600;

	dav_ext_lock		zone=dav;
	auth_basic		on;
	auth_basic_user_file	$webdav_auth;

	location / {
		dav_access		user:rw group:rw all:r;
		dav_methods		PUT DELETE MKCOL COPY MOVE;
		dav_ext_methods		PROPFIND OPTIONS LOCK UNLOCK;
	
		set $dest $http_destination;
		if (-d $request_filename) {
			rewrite	^(.*[^/])$ $1/;
			set	$dest $dest/;
		}
		if ($request_method ~ (MOVE|COPY)) {
			more_set_input_headers 'Destination: $dest';
		}

		if ($request_method = MKCOL) {
			rewrite ^(.*[^/])$ $1/ break;
		}

		if ($request_method = PROPPATCH) {
			add_header	Content-Type 'text/xml';
			return		207 '<?xml version="1.0"?><a:multistatus xmlns:a="DAV:"><a:response><a:propstat><a:status>HTTP/1.1 200 OK</a:status></a:propstat></a:response></a:multistatus>';
		}
	}
}

解读

访问 https://a.webdav.example.com, 将访问 /webdav/root/a/ 下的存储空间, 使用 /webdav/auth/a 文件为用户验证文件.

已知问题

Windows

  • 添加 webdav 路径时, 不管由于任何错误失败后, 要等待一段时间才能重试, 否则一直失败. 解决方案就是等一阵子.
xnix/nginx_webdav.1663494150.txt.gz · 最后更改: 2022/09/18 17:42 由 Hshh