WebDAV 基於 HTTP 協議的通訊協議,在GET、POST、HEAD等幾個HTTP標準方法以外添加了一些新的方法,使應用程式可對Web Server直接讀寫,並支援寫檔案鎖定(Locking)及解鎖(Unlock),還可以支援檔案的版本控制。
常用的檔案共享有三種:FTP、Samba、WebDAV,它們各有優缺點,瞭解後才能更好地根據自己的需求選擇方案。
FTP屬於古老的檔案共享方式了,因為安全性,現代瀏覽器最新已預設不能開啟FTP協議。SFTP在FTP基礎上增加了加密,在Linux上安裝OpenSSH後可以直接用SFTP協議傳輸。使用SFTP臨時傳送檔案還可以,但做檔案共享,效能不高,速度較慢。Samba是Linux下CIFS協議的實現,優勢在於對於小白使用簡章,和Windows系統檔案共享訪問一樣,不需要安裝第三方軟體,而且移動端也有大量APP支援。蘋果手機檔案APP中新增網路儲存用的就是這種方式。Windows下檔案共享使用445埠,且不能更改。445埠常常受駭客關照,在廣域網上大多運營封掉了訪埠,所以這種檔案共享只適合在內網使用。WebDAV 基於 HTTP 協議的通訊協議,在GET、POST、HEAD等幾個HTTP標準方法以外添加了一些新的方法,使應用程式可對Web Server直接讀寫,並支援寫檔案鎖定(Locking)及解鎖(Unlock),還可以支援檔案的版本控制。因為基於HTTP,在廣域網上共享檔案有天然的優勢,移動端檔案管理APP也大多支援WebDAV協議。使用HTTPS還能保安全性。Apache和Nginx支援WebDAV,可作為WebDAV檔案共享伺服器軟體。也可以使用專門的WebDAV軟體部署。WebDAV Server (推薦)WebDAV 是 GitHub 上開源的專案,基於 Go 語言實現,不僅跨平臺,還支援 ARM 架構,可在㠌入式裝置中部署 WebDAV 伺服器。
專案地址:https://github.com/hacdias/webdav
在 GitHub 下載對應的架構 WebDAV,如:windows-amd64-webdav.zip 。解壓後獲得 webdav.exe 。
用文字編輯器新建 config.yaml 檔案,內容如下:
# 監聽任意網絡卡,多網絡卡可指定對應ipaddress: 0.0.0.0port: 8081# 如果無需驗證填 falseauth: true# 如果不需要 https 則填 falsetls: true# https證書和金鑰,如果 tls 為 false,cert 和 key 不需要cert: /data/www/cert/szhome.xf1024.com_nginx/cert.pemkey: /data/www/cert/szhome.xf1024.com_nginx/cert.key# 訪問字首,建議預設prefix: /# 如果 auth 為 false 生效,檔案共享的路徑scope: /data/users/public# 是否允許修改modify: truerules: []# 跨域設定cors: enabled: true credentials: true allowed_headers: - Depth allowed_hosts: - http://localhost:8081 allowed_methods: - GET exposed_headers: - Content-Length - Content-Range# 使用者資訊,如果 auth 為 true 生效users: - username: user1 password: 123456 scope: /data/users/2021 - username: user2 password: 654321 scope: /data/users/2022
注意 yaml 檔案格式的書寫規則,users 下是需認證的使用者名稱,密碼,及使用者共享檔案。
使用時使用命令:
webdav -c ./config.yaml
Apache 開啟 WebDAV
Apache 開啟 WebDAV 需要開啟以下模組:
LoadModule dav_module modules/mod_dav.soLoadModule dav_fs_module modules/mod_dav_fs.soLoadModule dav_lock_module modules/mod_dav_lock.so
配置如下:
<VirtualHost *:80> ServerName dav.engr-z.com DocumentRoot /data/webdav <Directory "/data/webdav"> Options Indexes FollowSymLinks AllowOverride None Dav on AuthType Basic AuthName "WebDAV Upload" AuthUserFile conf/.htpasswd AuthBasicProvider file Require user webdav </Directory></VirtualHost><VirtualHost *:443> ServerName dav.engr-z.com DocumentRoot /data/webdav <Directory "/data/webdav"> Options Indexes FollowSymLinks AllowOverride None Dav on AuthType Basic AuthName "WebDAV Upload" AuthUserFile conf/.htpasswd AuthBasicProvider file Require user webdav </Directory># Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" # 新增 SSL 協議支援協議,去掉不安全的協議 SSLProtocol all -SSLv2 -SSLv3 # 修改加密套件如下 SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM SSLHonorCipherOrder on # 證書公鑰配置 SSLCertificateFile cert/dav.engr-z.com_apache/public.crt # 證書私鑰配置 SSLCertificateKeyFile cert/dav.wangzhengzhen.com_apache/cert.key # 證書鏈配置,如果該屬性開頭有 '#'字元,請刪除掉 SSLCertificateChainFile cert/dav.engr-z.com_apache/chain.crt</VirtualHost>
.htpasswd 檔案是儲存使用者名稱密碼的檔案,使用 apache 工具 htpasswd 建立:
htpasswd -c /etc/webdav/.htpasswd user1
如果需要建立多個使用者,在第二次執行時注意去掉 -c 引數,防止生成檔案覆蓋。
Nginx 開啟 WebDAV在Nginx中實現WebDAV需要安裝 libnginx-mod-http-dav-ext 模組,以下是Nginx的配置:
server { listen 80; listen [::]:80; server_name dav.engr-z.com; auth_basic "Authorized Users Only"; auth_basic_user_file /etc/.htpasswd; location / { root /data/webdav; client_body_temp_path /var/temp; dav_methods PUT DELETE MKCOL COPY MOVE; dav_ext_methods PROPFIND OPTIONS; create_full_put_path on; client_max_body_size 10G; }}server { listen 443; listen [::]:443; server_name dav.engr-z.com; ssl on; ssl_certificate /data/www/cert/dav.engr-z.com_nginx/cert.pem; ssl_certificate_key /data/www/cert/dav.engr-z.com_nginx/cert.key; ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; ssl_prefer_server_ciphers on; location / { root /data/webdav; client_body_temp_path /var/temp; dav_methods PUT DELETE MKCOL COPY MOVE; dav_ext_methods PROPFIND OPTIONS; create_full_put_path on; client_max_body_size 10G; }}
.htpasswd 使用者密碼檔案的建立方式和 Apache 一樣,htpasswd是apache的工具,如果使用nginx,可以單獨安裝該工具而不安裝整個apache。在Ubuntu中使用 sudo apt install apache2-utils 安裝。
Nginx 對 WebDAV 支援不是太好,建議使用 Apache 或專用於 WebDAV 服務軟體架設。
WebDAV掛載/對映Windows開啟 “計算機” ,點右鍵新增一個網路位置,按嚮導填入地址,使用者名稱,密碼。
掛載指定碟符:
net use Y: https://dav.engr-z.com/ /user:engrz /persistent:YES 密碼
其中 qizheng 是我的使用者名稱密碼把 password 換成對應的密碼。/persistent 表示儲存對映,下次開機還在。執行完,開啟資源管理器,可以看到磁碟映射了。如果下次開機,發現不能開啟磁碟,訪問失敗,可以檢查 WebClient 服務是否開啟。
從Windows Vista起,微軟就禁用了http形式的基本WebDAV驗證形式(KB841215),必須使用https連線。我們可以修改登錄檔……
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters找到BasicAuthLevel把這個值從1改為2,然後進控制面板,服務,把WebClient服務重啟(沒有啟動的就啟動它)。
在某些版本的 Windows 作業系統中,WebDAV 驅動器的最大檔案大小被限制為 50MB。如果你試圖複製超過 50MB 大小的檔案,Windows 就會彈出錯誤提示框。當然,這個限制是可以透過修改登錄檔來消除的。
將登錄檔中位於HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters\FileSizeLimitInBytes處的鍵值由 50000000 (50MB) 修改為更大的數值。最大修改為:4294967295(0xffffffff)位元組,即4G。
這裡推薦使用免費軟體 RaiDrive ,透過 RaiDrive 對映的磁碟,沒有 http 和 上傳檔案大小限制,無需修改登錄檔。
RaiDrive 是一款能夠將一些網盤對映為本地網路磁碟的工具,支援 Google Drive、Google Photos、Dropbox、OneDrive、FTP、SFTP、WebDAV。
下載地址:https://www.raidrive.com
LinuxLinux 的檔案管理工具大多都支援 WebDAV ,以 Ubuntu 為例:
還可以使用命令掛載,需要安裝 davfs2 :
apt install davfs2
執行命令後系統會自動安裝,出現以下提示,選是。
掛載:
本文連結:https://engr-z.com/238.html