Nginx配置WebDav-制作私有网盘

环境

宿主机: window10

服务器: CentOS7(Linux)

Nginx : 1.18.0

网盘映射: RaiDrive

前言

  • 什么是Webdav

引用维基百科的解释:

基于Web的分布式编写和版本控制(WebDAV)是超文本传输协议(HTTP)的扩展,有利于用户间协同编辑和管理存储在万维网服务器文档。WebDAV由互联网工程任务组的工作组在RFC 4918中定义。

WebDAV扩展了request方法所允许的标准HTTP谓词和HTTP头。增加的谓词包括:

(1).COPY: 将资源从一个URI复制到另一个URI

(2).LOCK:锁定一个资源,webdav支持共享锁和互斥锁

(3).MKCOL: 创建集合(即目录)

(3).MOVE: 将资源从一个URI移动到另一个URI

(4).PROPFIND: 从Web资源中检索以XML格式存储的属性。它也被重载,以允许一个检索远程系统的集合结构(也叫目录层次结构)。

(5).PROPPATCH: 在单个原子性动作中更改和删除资源的多个属性

(6).UNLOCK: 解除资源的锁定

  • 2.Nginx-dav-ext-module是用来干嘛的

官方介绍:

The standard ngx_http_dav_module provides partial WebDAV implementation and only supports GET,HEAD,PUT,DELETE,MKCOL,COPY,MOVE methods.
For full WebDAV support in nginx you need to enable the standard ngx_http_dav_module as well as this module for the missing methods.

大致意思就是,标准的ngx_http_dav_module 提供了部分的WebDAV是实现,只支持GET,HEAD, PUT,DELETE,MKCOL,COPY,MOVE 方法,但是为了在Nginx中获取完整的WebDAV支持,就需要启用标准的ngx_http_dav_module这个模块来处理缺少的方法。

RFC4918

基于Web的分布式编写和版本控制

nginx-dav-ext-module

构建

下载ngx-dav-ext-module

如果你的服务器上安装了Git可以直接使用下面的命令:

cd /usr/local/src && git clone --recursive https://github.com/arut/nginx-dav-ext-module

如果没有Git 也可以将其在宿主机上下载完成后,上传至服务器。

重新编译Nginx

这里我已经将Nginx提前安装完毕了(使用的是Yum安装的), 但是我们需要重新编译安装,将ngx-dav-ext-module加入到Nginx中。

  • 1.查看原有的编译参数
[root@xxxx ~]# nginx -V
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib64/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--user=nginx --group=nginx \
--with-compat \
--with-file-aio \
--with-threads \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_secure_link_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_realip_module \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' \
--with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' \
--add-module=/usr/local/src/ngx_cache_purge-2.3 \
--add-module=/usr/local/src/headers-more-nginx-module-0.33
  • 2.将原有的Nginx备份
mv /usr/sbin/nginx /usr/sbin/nginx.bak
  • 3.下载和自己原有的Nginx版本相同的源码包(如:1.18.0), 并解压
tar -xzvg nginx-1.18.0.tar.gz
cd nginx-1.18.0
  • 4.对新版重新编译配置

根据第一步拿到自己的原有的配置,并在后面加入如下的配置:

....
+ --with-http_dav_module --add-module=/usr/local/src/nginx-dav-ext-module

这里的路径一定是要你放置ngx-dav-ext-module的位置,不然后面编译会出现无法找到该路径

※ 如果出现了如下错误:

/configure: error: the HTTP XSLT module requires the libxml2/libxslt

说明缺少依赖:

yum -y install libxml2 libxml2-dev
yum -y install libxslt-devel
  • 5.编译
make -j12
# 可以使用 下面的命令查看上一条命令 是否成功
echo ?$ 
  • 5.进入obj目录,替换原有的Nginx
cp objs/nginx /usr/local/nginx/sbin/nginx

确认模块启用

nginx -V

可见配置的参数后面有加载模块:

--with-http_dav_module --add-module=/usr/local/src/nginx-dav-ext-module

创建上传目录

mkdir -p /home/www/webdav
# 设置文件所有者 如果是所有人都可以使用的话设置  nobody:nobody
chown nginx:nginx /home/www/webdav
# 设置文件权限
chmod -R 700 /home/www/webdav

配置身份验证

  • 1.安装httpd工具
yum -y install httpd-tools
  • 2.创建密码文件
htpasswd -c /opt/soft/.htpasswd dav
# 如果还有用户
htpasswd /opt/soft/.htpasswd user1
  • 3.密码文件权限配置
chown nginx:nginx /opt/soft/.htpasswd
chmod 600 /opt/soft/.htpasswd

配置nginx

...
location /webdav {
client_max_body_size 5G; # 最大允许上传文件大小
alias /home/www/webdav;
index index.html index.htm;
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 group:rw all:r; # 创建文件的以及目录的访问权限
# auth_basic "Authorized Users Only";
# auth_basic "Authorized Users WebDAV";
auth_basic "user login";
auth_basic_user_file /opt/soft/.htpasswd;
}
...

根据自己需求,设置路径,以及文件存路径

  • 重启Nginx
sytemctl restart nginx

客户端

我这里使用的是windows,其实有很多工具

如:

Cyberduck: 官方地址: https://cyberduck.io/

我这里使用的是 RaiDrive: 官方地址: http://www.raidrive.com/

RaiDive配置

输入自己对应的配的配置,然后点击确定 。此时打开我们的资源管理器(win + E)

资源管理器 盘符

此时我们就可以像使用本地文件一样操作服务器上的文件了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容