基於Nginx搭建WebDAV服務

2022-12-06 18:00:21
title: 基於Nginx搭建WebDAV服務
categories:
  - [IT,網路,服務]
tags:
  - WebDAV
  - Nginx
comments: true
date: 2022-11-09 17:19:46
description:

基於Nginx搭建WebDAV服務

在搭建 Joplin 筆記服務的時候,發現了可以通過 WebDAV 服務來實現雲筆記的功能,所以本篇就來介紹一下,怎麼快速搭建 WebDAV 服務。

WebDAV (Web-based Distributed Authoring and Versioning) 一種基於 HTTP 1.1協定的通訊協定。它擴充套件了HTTP 1.1,在GET、POST、HEAD等幾個HTTP標準方法以外新增了一些新的方法,使應用程式可對[Web Server](https://baike.baidu.com/item/Web Server/9306055?fromModule=lemma_inlink)直接讀寫,並支援寫檔案鎖定(Locking)及解鎖(Unlock),還可以支援檔案的版本控制

從我的角度,簡單地理解為,類似於FTP服務,提供網路檔案互動服務。可以使用使用者名稱和密碼來控制存取,通過特定的使用者端,可以直接儲存、下載、編輯檔案。

搭建與設定

這裡我是用寶塔面板來實現整個過程的,知曉原理後,也可以用其他類似的手段實現。

官方安裝範例 [Nginx http_dav_module](Module ngx_http_dav_module (nginx.org))

重新安裝 Nginx

在寶塔面板,Nginx 安裝中選擇 編譯安裝,並點選 新增自定義模組

新增自定義模組

模組名稱:http_dav_module
模組描述:webdev
模組引數:--with-http_dav_module --add-module=/root/nginx-dav-ext-module
前置指令碼:git clone https://github.com/arut/nginx-dav-ext-module.git /root/nginx-dav-ext-module

nginx-dav-ext-module 介紹

標準的 ngx_http_dav_module 提供了部分WebDAV實現,僅支援GET、HEAD、PUT、DELETE、MKCOL、COPY和MOVE方法。要在 Nginx 中獲得完整的 WebDAV 支援,您需要啟用 ngx_http_dav_module 以及此模組(nginx-dav-ext-module)以補充缺少的方法,如:PROPFIND,OPTIONS,LOCK,UNLOCK。

部署 WebDAV 網站服務

新增一個新網站

在組態檔中新增以下內容(別忘了還要新增第二行程式碼,就在server上面新增):

http {
    dav_ext_lock_zone zone=foo:1m; # 預設鎖超時值為 1 分鐘

    ...

    server {
        ...

        location / {
            root /www/wwwroot/webdav;
    	
            client_body_temp_path /www/wwwroot/webdav/client_temp;
            #client_max_body_size 102400M;#大檔案支援

            dav_methods PUT DELETE MKCOL COPY MOVE;
            create_full_put_path on;
            dav_access		user:rw group:rw  all:r;

            autoindex on;
            # 需要 nginx-dav-ext-module 才有下面的選項
            dav_ext_methods PROPFIND OPTIONS LOCK UNLOCK;
            dav_ext_lock zone=foo;
        }
    }
}

在 網站目錄 加入密碼保護即可

應用

接下來,就可以在需要 WebDAV 服務的地方使用了。

比如:Joplin

WebDAV URL:就是你存取那個 WebDAV 網站的地址

使用者名稱和密碼:就是剛才設定的密碼存取