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 文件,內容如下:
# 監聽任意網卡,多網卡可指定對應ip
address: 0.0.0.0
port: 8081
# 如果無需驗證填 false
auth: true
# 如果不需要 https 則填 false
tls: true
# https證書和密鑰,如果 tls 為 false,cert 和 key 不需要
cert: /data/www/cert/szhome.xf1024.com_nginx/cert.pem
key: /data/www/cert/szhome.xf1024.com_nginx/cert.key
# 訪問前綴,建議默認
prefix: /
# 如果 auth 為 false 生效,文件共享的路徑
scope: /data/users/public
# 是否允許修改
modify: true
rules: []
# 跨域設置
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.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule 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_macHINESYSTEMCurrentControlSetServicesWebClientParameters
找到BasicAuthLevel把這個值從1改為2,然后進控制面板,服務,把WebClient服務重啟(沒有啟動的就啟動它)。

在某些版本的 Windows 操作系統中,WebDAV 驅動器的最大文件大小被限制為 50MB。如果你試圖復制超過 50MB 大小的文件,Windows 就會彈出錯誤提示框。當然,這個限制是可以通過修改注冊表來消除的。
將注冊表中位于
HKLMSYSTEMCurrentControlSetServicesWebClientParametersFileSizeLimitInBytes
處的鍵值由 50000000 (50MB) 修改為更大的數值。最大修改為:4294967295(0xffffffff)字節,即4G。

這里推薦使用免費軟件 RaiDrive ,通過 RaiDrive 映射的磁盤,沒有 http 和 上傳文件大小限制,無需修改注冊表。
RaiDrive 是一款能夠將一些網盤映射為本地網絡磁盤的工具,支持 google Drive、Google Photos、Dropbox、OneDrive、FTP、SFTP、WebDAV。

下載地址:https://www.raidrive.com
- Linux
Linux 的文件管理工具大多都支持 WebDAV ,以 Ubuntu 為例:

還可以使用命令掛載,需要安裝 davfs2 :
apt install davfs2
執行命令后系統會自動安裝,出現以下提示,選是。

掛載:
sudo mount -t davfs http://dav.engr-z/ ./webdav/
除非注明,否則均為"攻城獅·正"原創文章,轉載請注明出處。
本文鏈接:https://engr-z.com/238.html