WebDAV 基于 HTTP 協(xié)議的通信協(xié)議,在GET、POST、HEAD等幾個(gè)HTTP標(biāo)準(zhǔn)方法以外添加了一些新的方法,使應(yīng)用程序可對(duì)Web Server直接讀寫,并支持寫文件鎖定(Locking)及解鎖(Unlock),還可以支持文件的版本控制。
常用的文件共享有三種:FTP、Samba、WebDAV,它們各有優(yōu)缺點(diǎn),了解后才能更好地根據(jù)自己的需求選擇方案。
- FTP屬于古老的文件共享方式了,因?yàn)榘踩裕F(xiàn)代瀏覽器最新已默認(rèn)不能打開(kāi)FTP協(xié)議。SFTP在FTP基礎(chǔ)上增加了加密,在linux上安裝OpenSSH后可以直接用SFTP協(xié)議傳輸。使用SFTP臨時(shí)傳送文件還可以,但做文件共享,性能不高,速度較慢。
- Samba是Linux下CIFS協(xié)議的實(shí)現(xiàn),優(yōu)勢(shì)在于對(duì)于小白使用簡(jiǎn)章,和windows系統(tǒng)文件共享訪問(wèn)一樣,不需要安裝第三方軟件,而且移動(dòng)端也有大量App支持。蘋果手機(jī)文件APP中添加網(wǎng)絡(luò)存儲(chǔ)用的就是這種方式。Windows下文件共享使用445端口,且不能更改。445端口常常受黑客關(guān)照,在廣域網(wǎng)上大多運(yùn)營(yíng)封掉了訪端口,所以這種文件共享只適合在內(nèi)網(wǎng)使用。
- WebDAV 基于 HTTP 協(xié)議的通信協(xié)議,在GET、POST、HEAD等幾個(gè)HTTP標(biāo)準(zhǔn)方法以外添加了一些新的方法,使應(yīng)用程序可對(duì)Web Server直接讀寫,并支持寫文件鎖定(Locking)及解鎖(Unlock),還可以支持文件的版本控制。因?yàn)榛贖TTP,在廣域網(wǎng)上共享文件有天然的優(yōu)勢(shì),移動(dòng)端文件管理APP也大多支持WebDAV協(xié)議。使用HTTPS還能保安全性。Apache和Nginx支持WebDAV,可作為WebDAV文件共享服務(wù)器軟件。也可以使用專門的WebDAV軟件部署。
WebDAV Server (推薦)
WebDAV 是 GitHub 上開(kāi)源的項(xiàng)目,基于 Go 語(yǔ)言實(shí)現(xiàn),不僅跨平臺(tái),還支持 ARM 架構(gòu),可在?入式設(shè)備中部署 WebDAV 服務(wù)器。
項(xiàng)目地址:https://github.com/hacdias/webdav
在 GitHub 下載對(duì)應(yīng)的架構(gòu) WebDAV,如:windows-amd64-webdav.zip 。解壓后獲得 webdav.exe 。
用文本編輯器新建 config.yaml 文件,內(nèi)容如下:
# 監(jiān)聽(tīng)任意網(wǎng)卡,多網(wǎng)卡可指定對(duì)應(yīng)ip
address: 0.0.0.0
port: 8081
# 如果無(wú)需驗(yàn)證填 false
auth: true
# 如果不需要 https 則填 false
tls: true
# https證書(shū)和密鑰,如果 tls 為 false,cert 和 key 不需要
cert: /data/www/cert/szhome.xf1024.com_nginx/cert.pem
key: /data/www/cert/szhome.xf1024.com_nginx/cert.key
# 訪問(wèn)前綴,建議默認(rèn)
prefix: /
# 如果 auth 為 false 生效,文件共享的路徑
scope: /data/users/public
# 是否允許修改
modify: true
rules: []
# 跨域設(shè)置
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 文件格式的書(shū)寫規(guī)則,users 下是需認(rèn)證的用戶名,密碼,及用戶共享文件。
使用時(shí)使用命令:
webdav -c ./config.yaml
Apache 開(kāi)啟 WebDAV
Apache 開(kāi)啟 WebDAV 需要打開(kāi)以下模塊:
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 協(xié)議支持協(xié)議,去掉不安全的協(xié)議
SSLProtocol all -SSLv2 -SSLv3
# 修改加密套件如下
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
# 證書(shū)公鑰配置
SSLCertificateFile cert/dav.engr-z.com_apache/public.crt
# 證書(shū)私鑰配置
SSLCertificateKeyFile cert/dav.wangzhengzhen.com_apache/cert.key
# 證書(shū)鏈配置,如果該屬性開(kāi)頭有 '#'字符,請(qǐng)刪除掉
SSLCertificateChainFile cert/dav.engr-z.com_apache/chain.crt
</VirtualHost>
.htpasswd 文件是保存用戶名密碼的文件,使用 apache 工具 htpasswd 創(chuàng)建:
htpasswd -c /etc/webdav/.htpasswd user1
如果需要?jiǎng)?chuàng)建多個(gè)用戶,在第二次執(zhí)行時(shí)注意去掉 -c 參數(shù),防止生成文件覆蓋。
Nginx 開(kāi)啟 WebDAV
在Nginx中實(shí)現(xiàn)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 用戶密碼文件的創(chuàng)建方式和 Apache 一樣,htpasswd是apache的工具,如果使用nginx,可以單獨(dú)安裝該工具而不安裝整個(gè)apache。在Ubuntu中使用 sudo apt install apache2-utils 安裝。
Nginx 對(duì) WebDAV 支持不是太好,建議使用 Apache 或?qū)S糜?WebDAV 服務(wù)軟件架設(shè)。
WebDAV掛載/映射
- Windows
打開(kāi) “計(jì)算機(jī)” ,點(diǎn)右鍵添加一個(gè)網(wǎng)絡(luò)位置,按向?qū)钊氲刂罚脩裘艽a。


掛載指定盤符:
net use Y: https://dav.engr-z.com/ /user:engrz /persistent:YES 密碼
其中 qizheng 是我的用戶名
密碼把 password 換成對(duì)應(yīng)的密碼。
/persistent 表示保存映射,下次開(kāi)機(jī)還在。
執(zhí)行完,打開(kāi)資源管理器,可以看到磁盤映射了。
如果下次開(kāi)機(jī),發(fā)現(xiàn)不能打開(kāi)磁盤,訪問(wèn)失敗,可以檢查 WebClient 服務(wù)是否開(kāi)啟。

從Windows Vista起,微軟就禁用了http形式的基本W(wǎng)ebDAV驗(yàn)證形式(KB841215),必須使用https連接。我們可以修改注冊(cè)表……
HKEY_LOCAL_macHINESYSTEMCurrentControlSetServicesWebClientParameters
找到BasicAuthLevel把這個(gè)值從1改為2,然后進(jìn)控制面板,服務(wù),把WebClient服務(wù)重啟(沒(méi)有啟動(dòng)的就啟動(dòng)它)。

在某些版本的 Windows 操作系統(tǒng)中,WebDAV 驅(qū)動(dòng)器的最大文件大小被限制為 50MB。如果你試圖復(fù)制超過(guò) 50MB 大小的文件,Windows 就會(huì)彈出錯(cuò)誤提示框。當(dāng)然,這個(gè)限制是可以通過(guò)修改注冊(cè)表來(lái)消除的。
將注冊(cè)表中位于
HKLMSYSTEMCurrentControlSetServicesWebClientParametersFileSizeLimitInBytes
處的鍵值由 50000000 (50MB) 修改為更大的數(shù)值。最大修改為:4294967295(0xffffffff)字節(jié),即4G。

這里推薦使用免費(fèi)軟件 RaiDrive ,通過(guò) RaiDrive 映射的磁盤,沒(méi)有 http 和 上傳文件大小限制,無(wú)需修改注冊(cè)表。
RaiDrive 是一款能夠?qū)⒁恍┚W(wǎng)盤映射為本地網(wǎng)絡(luò)磁盤的工具,支持 google Drive、Google Photos、Dropbox、OneDrive、FTP、SFTP、WebDAV。

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

還可以使用命令掛載,需要安裝 davfs2 :
apt install davfs2
執(zhí)行命令后系統(tǒng)會(huì)自動(dòng)安裝,出現(xiàn)以下提示,選是。

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