利用Nginx WebDAV搭建自己的网盘

利用Nginx WebDAV搭建自己的网盘

需要准备的东西

硬件:

Linux服务器

软件:

名称 简介 下载地址
nginx源码 服务端需要自己编译代码 https://nginx.org/en/download.html
nginx扩展dav模块 nginx自身的dav功能不足以用来做webdav,需要用这个模块扩展 https://github.com/arut/nginx-dav-ext-module.git
raidrive windows客户端 https://www.raidrive.com/download

编译nginx

获取上次编译的参数

如果系统已经通过apt或者yum等工具安装过了nginx,可以通过 nginx -V 指令提取上次编译的参数
里面如果有涉及到目录路径的项需要根据情况编辑

安装用到的库


apt install -y gcc make libpcre3-dev libssl-dev zlib1g-dev libxml2 libxml2-dev libxslt-dev libgd-dev libgeoip-dev

配置与编译

在配置参数最后加上--add-module=./nginx-dav-ext-module 后面的路径根据情况修改.

./configure --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-compat --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_geoip_module=dynamic --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module --with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module --add-module=./nginx-dav-ext-module

make -j8

安装

如果是初次安装nginx

可以直接用下面的命令把编译出来的结果安装到系统

make install

如果是要替换已经存在的nginx

把编译出来的文件复制过去替换即可:

cp objs/nginx /usr/sbin/nginx
cp objs/*.so //usr/share/nginx/modules/

配置webdav

创建目录

请根据实际使用情况修改目录:

mkdir /mnt/d/webdav
cd !:1
mkdir mydrive

安装密码配置工具并配置密码

注意,这里的user和password请设置一下用户名和密码,后面连接要用

apt install -y apache2-utils 
# 生成密码文件:
htpasswd -cb ./drive1htpasswd user password

最终目录结构:

配置nginx:

编辑这个文件:

vim /etc/nginx/sites-available/drive1

内容:

server {
        #for https
    #listen  443 ssl;
    #server_name xxx.com;
    #ssl_certificate ./fullchain10.pem;
    #ssl_certificate_key ./privkey10.pem;
    #ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        #for http
        listen 113;

    charset utf-8,gbk;
    location / {
        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;
        }
        root /mnt/d/webdav/drive1;
        # alias /data/dav;
        autoindex on;
        dav_methods PUT DELETE MKCOL COPY MOVE;
        dav_ext_methods PROPFIND OPTIONS;
        create_full_put_path on;
        client_max_body_size 0M;
        dav_access user:rw group:rw all:rw;
        auth_basic "Authorized Users Only";
        auth_basic_user_file /mnt/d/webdav/drive1htpasswd;
    }
}

然后创建个文件链接到enabled目录:

ln -s /etc/nginx/sites-available/drive1 /etc/nginx/sites-enabled/

重启nginx:

systemctl restart nginx

如果没有报错就是成功了

Windows客户端连接


填写这些:

注意address后面的勾,用于选择http协议或者https协议
apply -> ok

如果这里显示三角形,点一下,就会连接,然后显示正方形表示成功.

Linux客户端连接

安装

apt install -y davfs2
echo "use_locks       0" >> /etc/davfs2/davfs2.conf

手工挂载试试:

mkdir /mnt/drive1
mount -t davfs https://xx.com/dav/ /mnt/drive1

设为开机自动挂载

网上很多文章都推荐添加到fstab,不过不建议那么干,那玩意不稳定,很容易出问题,导致开机无法进系统,这里推荐用systemd管理挂载
复制这段脚本,参数分别修改一下,在shell执行,就可以配置好自动挂载

# -----编辑这些参数:
export url=https://xx.com/dav/
export mntpath=/mnt/drive1/
export mntscript=mnt-drive1
# 修改时注意上面两行目录名称的关联,如果不一致会挂载失败
export user=user
export password=password
# -----
# 下面指令自动生成挂载文件,别改
echo ""$url" "$user" "$password"" >> /etc/davfs2/secrets
export mountfile=/etc/systemd/system/$mntscript.mount
export automountfile=/etc/systemd/system/$mntscript.automount
echo "[Unit]
Description = Mount webdav disk
Wants=network.target
After=network.target
[Mount]
What = $url
Where = $mntpath
Type = davfs
Options = defaults
[Install]
WantedBy = multi-user.target">$mountfile

echo "[Automount]
Where = $mntpath
[Install]
WantedBy = multi-user.target">$automountfile
systemctl enable ${mntscript}.automount
systemctl start ${mntscript}.automount
原文地址:https://www.cnblogs.com/DragonStart/p/13410090.html