為了做個NAS,折騰了超久的Samba,看似簡單,其實Samba的使用者設定實在太繁瑣,坑太深。使用者權限和目錄權限、甚至磁盤格式稍有不同,都會導緻無法登入。實在不靠譜,實際體驗也不是很穩定。
是以在找Alternatives過程中,發現了這個也存在了很久的WebDav協定。
不像Samba是一個微軟開發的軟體體系,WebDav隻是一種協定,确切說是世界上最普遍的HTTP協定的一個小擴充。它不是一個軟體。
是以就好了解,為什麼搜尋不到WebDav的官網和官方安裝指南了——因為沒有“官方”。誰都可以開發軟體支援這個協定,就像水都可以開發浏覽器支援HTTP協定浏覽網站一樣。
參考:How To Set Up WebDAV With Apache2 On Debian Etch
# 安裝Apache2伺服器
sudo apt-get install -y apache2
# 開啟Apache2中對WebDav協定的支援 (記住最好在使用者目錄下執行否則報錯)
cd ~
sudo a2enmod dav
sudo a2enmod dav_fs
# 建立共享目錄并修改權限
sudo mkdir -p /var/www/webdav
sudo chown -R www-data:www-data /var/www/webdav
# 建立WebDav的通路使用者資料庫,順便建立使用者`pi`
sudo htpasswd -c /etc/apache2/webdav.password pi
# 建立guest使用者
#sudo htpasswd /etc/apache2/webdav.password guest
# 修改使用者資料庫通路權限
sudo chown root:www-data /etc/apache2/webdav.password
sudo chmod 640 /etc/apache2/webdav.password
# 打開預設配置檔案
sudo vim /etc/apache2/sites-available/000-default.conf
# 全部替換為以下内容(記得先備份):
Alias /webdav /var/www/webdav
<Location /webdav>
Options Indexes
DAV On
AuthType Basic
AuthName "webdav"
AuthUserFile /etc/apache2/webdav.password
Require valid-user
</Location>
# 重新開機Apache2伺服器
sudo systemctl restart apache2
# 或
sudo /etc/init.d/apache2 reload
然後就可以用任意浏覽器輸入:
http://樹莓派的IP位址/webdav
來通路了。
注意,
webdav
後面沒有
/
斜杠。
網頁中如果正常顯示目錄中的檔案結構,則可以正常通路:

這一步完成,我們就可以開始把這個共享檔案夾映射到Mac、Windows上的本地檔案夾了。
磁盤映射
網頁裡隻能像FTP一樣顯示檔案目錄和下載下傳檔案。
如果要正常使用,我們需要把它映射為本地目錄才行:
- Mac上:在Finder中用
打開連接配接伺服器選項,輸入CMD+K
,輸入Webdav建立過的使用者名密碼來完成映射。http://樹莓派IP位址/webdav
- iPhone上:安裝網盤通路最強的
,添加WebDav服務,輸入資訊後就可以通路。直接看文檔、看視訊、聽歌都行。Readdle Documents
- Windows上:比較麻煩的是,Win7以上預設隻支援HTTPS的網絡驅動器,做為HTTP的WebDav是不能連的。是以要修改Windows系統資料庫,讓它支援HTTP。方法入下:
- 開始菜單 -> 運作 -> 輸入regedit 并按回車,就打開了系統資料庫
- 系統資料庫中找到
這個項目,把值改為HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters\BasicAuthLevel
。2
- 開始菜單 -> 運作 -> 輸入cmd 并按回車,打開指令行
- 輸入
并按回車,停止網絡用戶端net stop webclient
- 輸入
并按回車,開啟網絡用戶端net start webclient
- 然後在檔案夾菜單中找到
,輸入網址映射網絡驅動器
或http://樹莓派IP位址/webdav
,然後輸入使用者名密碼,就能映射成功了。\\樹莓派IP位址\webdav
- 浏覽器上:随便什麼裝置,隻要是個浏覽器就能支援。可以線上播放常用視訊,直接打開圖檔浏覽。但是不能上傳。
挂載外部磁盤(移動硬碟、U盤)
和Samba一樣,隻要在
/var/www/webdav/
這個共享出來的檔案夾中,建立個空目錄,然後把移動硬碟用
mount
指令挂載到這個目錄上。外部就可以通路了。
使用速度和感受
配置上,比Samba不知道簡單到哪裡去了。
實驗證明,速度非凡!
Mac映射完成後,通路就像本地檔案夾一樣快,而且可以直接看視訊、預覽圖檔、支援原本各種快捷鍵等。
還可以直接拖放檔案來複制,速度也快到和本地複制檔案沒有差別。
如果對比Samba,最明顯的是看圖檔和視訊的打開速度。
Samba要等一秒以上,而WebDav幾乎沒有等待,或者說和本地打開檔案一樣速度。
唯一缺點是,Windows通路的話,是很卡很卡的。
穩定性上,因為是基于Apache2的,bug非常少,權限也不用傻傻分不清(和本地使用者也沒關系)。
遠端通路上(我在AWS新加坡伺服器上建的WebDav),速度也相當可靠,比我通路樹莓派的WebDav還快。畢竟亞馬遜伺服器配置高網速快。隻是視訊通路就沒那麼友善,經常卡頓、發生異常。但是也比較滿意了。
總結:WebDav配置友善,通路輕松,權限管理輕松,穩定,超多平台支援,完美!
常見問題
Apache2 Reload出錯
用指令
sudo /etc/init.d/apache2 reload
重新開機伺服器沒有反應,用指令
sudo /etc/init.d/apache2 reload
重新加載Apache2時也報錯:
[....] Reloading apache2 configuration (via systemctl): apache2.serviceJob for apache2.service failed. See 'systemctl status apache2.service' and 'journalctl -xn' for details.
failed!
一般來講,很有可能是80端口被占用了,有可能是Nginx。
是以要找到占用端口的服務,并關閉它。
具體方法如下:
# 找到所有nginx相關程序
$ ps -ef |grep nginx
# 按照顯示出的nginx程序号逐一關閉
$ sudo kill -TERM 程序号
# 或
$ pkill -9 nginx
# 重新加載Apache2伺服器
$ sudo /etc/init.d/apache2 reload
# 重新開機Apache2伺服器
$ sudo systemctl restart apache2
Reload後成功後就會顯示:
這樣再用浏覽器嘗試通路webdav服務的網址,就OK了
為什麼通路WebDav很慢
一般來講,無論是WebDav還是Samba,通路速度慢主要有這些因素:
- 伺服器網速不夠
- 本機用戶端電腦的網速不夠
- 路由器速度有限
- 伺服器硬碟(或U盤)配置太低(轉速低)
- 伺服器主機電腦組態低:CPU、記憶體都不足 (樹莓派就是這樣)
- 用戶端所在的電腦組態低
是以,如果以上所有原因都不構成連接配接速度慢的原因的話,才需要考慮是不是WebDav軟體設定和架構出了問題。