<-
Apache > HTTP 伺服器 > 文件 > 2.4 版 > 模組

Apache 模組 mod_dav

可用的語言:  en  |  fr  |  ja  |  ko 

說明分散式撰寫和版本控制 (WebDAV) 功能
狀態擴充套件
模組識別碼dav_module
來源檔案mod_dav.c

摘要

這個模組為 Apache 提供 1 級和 2 級 WebDAV(「Web-based Distributed Authoring and Versioning」)功能。此 HTTP 協定擴充套件允許您建立、移動、複製和刪除遠端網路伺服器上的資源和集合。

Support Apache!

主題

指令

錯誤修正清單

另請參閱

top

啟用 WebDAV

若要啟用 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>
top

安全性問題

由於 DAV 存取方法允許遠端用戶端在伺服器上操作檔案,因此在啟用mod_dav 前您必須特別注意確保您的伺服器是安全的。

在啟用 DAV 的伺服器上任何位置都應受認證保護。不建議使用 HTTP 基本認證。您應至少使用 mod_auth_digest 模組提供的 HTTP 消化認證。幾乎所有 WebDAV 用戶端都支援這個認證方法。另一個方法是透過已啟用 SSL 的連線進行基本認證。

為了讓 mod_dav 管理檔案,它必須能夠使用 Apache 執行的 UserGroup 對其控制範圍內的目錄和檔案進行寫入。建立的新檔案亦會屬於這個 UserGroup。因此,控制對這個帳號的存取非常重要。DAV 儲存庫被視為 Apache 的私有部分;不應允許在 Apache 之外修改檔案(例如使用 FTP 或檔案系統層級工具)。

mod_dav 可能會遭受各種類型的阻斷服務攻擊。 LimitXMLRequestBody 指令可用於限制剖析大型 DAV 要求所消耗的記憶體量。 DavDepthInfinity 指令可用於防止對一個非常大的儲存庫執行 PROPFIND 要求消耗大量的記憶體。另一種可能的阻斷服務攻擊涉及一個用戶端,其透過許多大型檔案單純填滿所有可用磁碟空間。在 Apache 中沒有直接的方法可以防止這種情況,因此您應避免對不受信任的使用者提供 DAV 存取權。

top

複雜配置

一個常見的要求是用 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 應用程式來操作這些程式碼。

top

Dav 指令

說明啟用 WebDAV HTTP 方法
語法Dav 開|關|提供者名稱
預設值Dav 關
內容目錄
狀態擴充套件
模組mod_dav

可用 Dav 指令為已提供容器啟用 WebDAV HTTP 方法

<Location "/foo">
    Dav On
</Location>

值實際上是預設提供者 檔案系統 的別名,這個提供者由 mod_dav_fs 模組來服務。請注意,一旦為某個指定位置啟用 DAV,就不能為其子指定位置停用 DAV。如需完整的設定範例,請參閱上方的區段

在保護您的伺服器安全之前,請勿啟用 WebDAV。否則每個人都可以在您的系統上分發檔案。
top

DavBasePath 指令

說明設定儲存庫根路徑
語法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>
top

DavDepthInfinity 指令

說明允許 PROPFIND,深度:無窮要求
語法DavDepthInfinity 開|關
預設值DavDepthInfinity 關
內容伺服器設定、虛擬主機、目錄
狀態擴充套件
模組mod_dav

可用 DavDepthInfinity 指令允許含有標頭「深度:無窮」的 PROPFIND 要求處理。由於這種類型的要求會構成阻斷服務攻擊,因此預設是不允許的。

top

DavMinTimeout 指令

說明伺服器鎖定 DAV 資源的最小時間量
語法DavMinTimeout 秒數
預設值DavMinTimeout 0
內容伺服器設定、虛擬主機、目錄
狀態擴充套件
模組mod_dav

當用戶端要求鎖定某個 DAV 資源時,也可以指定伺服器自動移除鎖定的時間。這個值只是一個要求,伺服器可以忽略它或通知用戶端一個任意的值。

使用 DavMinTimeout 指令,以秒為單位指定傳回給用戶端的最短鎖定逾時時間。Microsoft Web Folders 預設逾時時間為 120 秒;DavMinTimeout 可以將其改寫為較高數值(例如 600 秒),以減少因網路延遲導致用戶端失去鎖定的機率。

範例

<Location "/MSWord">
    DavMinTimeout 600
</Location>

可用的語言:  en  |  fr  |  ja  |  ko 

top

留言

注意
此處並非問答區段。此處張貼的意見應針對改善文件或伺服器的建議,如果已實作或被認為無效/離題,我們的版主可能會將其移除。有關如何管理 Apache HTTP Server 的問題應導向我們的 IRC 頻道,即 Libera.chat 上的 #httpd,或寄送給我們的 郵寄清單