Apache HTTP 伺服器 2.4 版
說明 | 分散式撰寫和版本控制 (WebDAV) 功能 |
---|---|
狀態 | 擴充套件 |
模組識別碼 | dav_module |
來源檔案 | mod_dav.c |
這個模組為 Apache 提供 1 級和 2 級 WebDAV(「Web-based Distributed Authoring and Versioning」)功能。此 HTTP 協定擴充套件允許您建立、移動、複製和刪除遠端網路伺服器上的資源和集合。
若要啟用 mod_dav
,請將以下內容加入 httpd.conf
檔案中的某個容器
Dav On
這會啟用 DAV 檔案系統提供者,它會由 mod_dav_fs
模組來執行。因此,必須將這個模組編譯到伺服器中,或是在執行階段使用 LoadModule
指令來載入它。
此外,必須在 httpd.conf
檔案的「全域」區段中使用 DavLockDB
指令,指定 DAV 鎖定資料庫的位置
DavLockDB /usr/local/apache2/var/DavLock
放置鎖定資料庫檔案的目錄,必須讓執行 Apache 的 使用者
和 群組
可以寫入。
您可能想新增一個 <Limit>
子句在 <Location>
指令內以限制對啟用 DAV 位置的存取。若您想設定 DAV 用戶端在一次的要求中能傳送的位元組最大值,您必須使用 LimitXMLRequestBody
指令。在 DAV 要求上,「常規」的 LimitRequestBody
指令是沒有作用的。
DavLockDB "/usr/local/apache2/var/DavLock" <Directory "/usr/local/apache2/htdocs/foo"> Require all granted Dav On AuthType Basic AuthName DAV AuthUserFile "user.passwd" <LimitExcept GET POST OPTIONS> Require user admin </LimitExcept> </Directory>
由於 DAV 存取方法允許遠端用戶端在伺服器上操作檔案,因此在啟用mod_dav
前您必須特別注意確保您的伺服器是安全的。
在啟用 DAV 的伺服器上任何位置都應受認證保護。不建議使用 HTTP 基本認證。您應至少使用 mod_auth_digest
模組提供的 HTTP 消化認證。幾乎所有 WebDAV 用戶端都支援這個認證方法。另一個方法是透過已啟用 SSL 的連線進行基本認證。
為了讓 mod_dav
管理檔案,它必須能夠使用 Apache 執行的 User
和 Group
對其控制範圍內的目錄和檔案進行寫入。建立的新檔案亦會屬於這個 User
和 Group
。因此,控制對這個帳號的存取非常重要。DAV 儲存庫被視為 Apache 的私有部分;不應允許在 Apache 之外修改檔案(例如使用 FTP 或檔案系統層級工具)。
mod_dav
可能會遭受各種類型的阻斷服務攻擊。 LimitXMLRequestBody
指令可用於限制剖析大型 DAV 要求所消耗的記憶體量。 DavDepthInfinity
指令可用於防止對一個非常大的儲存庫執行 PROPFIND
要求消耗大量的記憶體。另一種可能的阻斷服務攻擊涉及一個用戶端,其透過許多大型檔案單純填滿所有可用磁碟空間。在 Apache 中沒有直接的方法可以防止這種情況,因此您應避免對不受信任的使用者提供 DAV 存取權。
一個常見的要求是用 mod_dav
來操作動態檔案(PHP 程式碼、CGI 程式碼等)。這很困難,因為 GET
要求總是會執行程式碼,而不是下載其內容。一種避免這種情況的方法是將兩個不同的 URL 對應到這個內容,其中一個會執行程式碼,另一個則允許透過 DAV 下載並操作它。
Alias "/phparea" "/home/gstein/php_files" Alias "/php-source" "/home/gstein/php_files" <Location "/php-source"> Dav On ForceType text/plain </Location>
有了這項設定,http://example.com/phparea
可用於存取 PHP 程式碼的輸出,而 http://example.com/php-source
可搭配 DAV 應用程式來操作這些程式碼。
說明 | 啟用 WebDAV HTTP 方法 |
---|---|
語法 | Dav 開|關|提供者名稱 |
預設值 | Dav 關 |
內容 | 目錄 |
狀態 | 擴充套件 |
模組 | mod_dav |
可用 Dav
指令為已提供容器啟用 WebDAV HTTP 方法
<Location "/foo"> Dav On </Location>
開
值實際上是預設提供者 檔案系統
的別名,這個提供者由 mod_dav_fs
模組來服務。請注意,一旦為某個指定位置啟用 DAV,就不能為其子指定位置停用 DAV。如需完整的設定範例,請參閱上方的區段。
說明 | 設定儲存庫根路徑 |
---|---|
語法 | DavBasePath 根路徑 |
預設值 | 無 |
內容 | 目錄 |
狀態 | 擴充套件 |
模組 | mod_dav |
相容性 | 於 2.4.58 及後續版本中可用 |
如果使用正規表示式比對 (例如 LocationMatch
) 設定 DAV 儲存庫,則 mod_dav
就無法只從路徑名稱找到儲存庫的根目錄。第三方提供者 (例如 Subversion's mod_dav_svn) 在沒有正確儲存庫根目錄的情況下可能無法處理要求。
若要讓提供者在這種設定下正常運作,必須使用 DavBasePath
。
<LocationMatch "^/repos/"> Dav svn DavBasePath /repos SVNParentPath /var/svn </LocationMatch>
說明 | 允許 PROPFIND,深度:無窮要求 |
---|---|
語法 | DavDepthInfinity 開|關 |
預設值 | DavDepthInfinity 關 |
內容 | 伺服器設定、虛擬主機、目錄 |
狀態 | 擴充套件 |
模組 | mod_dav |
可用 DavDepthInfinity
指令允許含有標頭「深度:無窮」的 PROPFIND
要求處理。由於這種類型的要求會構成阻斷服務攻擊,因此預設是不允許的。
說明 | 伺服器鎖定 DAV 資源的最小時間量 |
---|---|
語法 | DavMinTimeout 秒數 |
預設值 | DavMinTimeout 0 |
內容 | 伺服器設定、虛擬主機、目錄 |
狀態 | 擴充套件 |
模組 | mod_dav |
當用戶端要求鎖定某個 DAV 資源時,也可以指定伺服器自動移除鎖定的時間。這個值只是一個要求,伺服器可以忽略它或通知用戶端一個任意的值。
使用 DavMinTimeout
指令,以秒為單位指定傳回給用戶端的最短鎖定逾時時間。Microsoft Web Folders 預設逾時時間為 120 秒;DavMinTimeout
可以將其改寫為較高數值(例如 600 秒),以減少因網路延遲導致用戶端失去鎖定的機率。
<Location "/MSWord"> DavMinTimeout 600 </Location>