Apache HTTP 服务器版本 2.4
描述 | 分布式创作和版本控制 (WebDAV) 功能 |
---|---|
状态 | 扩展 |
模块标识符 | dav_module |
源文件 | mod_dav.c |
此模块为 Apache 提供了 1 类和 2 类 WebDAV(“基于 Web 的分布式创作和版本控制”)功能。此 HTTP 协议扩展允许在远程 Web 服务器上创建、移动、复制和删除资源和集合。
要启用 mod_dav
,请将以下内容添加到 httpd.conf
文件中的容器中
Dav On
这将启用 DAV 文件系统提供程序,该提供程序由 mod_dav_fs
模块实现。因此,该模块必须编译到服务器中或使用 LoadModule
指令在运行时加载。
此外,必须在 httpd.conf
文件的全局部分使用 DavLockDB
指令指定 DAV 锁数据库的位置
DavLockDB /usr/local/apache2/var/DavLock
包含锁数据库文件的目录必须可由运行 Apache 的 User
和 Group
写入。
您可能希望在 <Location>
指令内添加 <Limit>
子句以限制对启用 DAV 的位置的访问。如果您想设置 DAV 客户端可以在一次请求中发送的最大字节数,则必须使用 LimitXMLRequestBody
指令。“正常” LimitRequestBody
指令对 DAV 请求无效。
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 基本身份验证。您应该至少使用 HTTP 摘要身份验证,该身份验证由 mod_auth_digest
模块提供。几乎所有 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 On|Off|provider-name |
默认值 | Dav Off |
上下文 | 目录 |
状态 | 扩展 |
模块 | mod_dav |
使用 Dav
指令为给定的容器启用 WebDAV HTTP 方法
<Location "/foo"> Dav On </Location>
值 On
实际上是默认提供程序 filesystem
的别名,该提供程序由 mod_dav_fs
模块提供。请注意,一旦您为某个位置启用了 DAV,就无法为子位置禁用它。有关完整配置示例,请查看上面的部分。
描述 | 配置存储库根路径 |
---|---|
语法 | DavBasePath root-path |
默认值 | 无 |
上下文 | 目录 |
状态 | 扩展 |
模块 | mod_dav |
兼容性 | 在版本 2.4.58 及更高版本中可用 |
如果 DAV 存储库是使用正则表达式匹配配置的(例如 LocationMatch
),那么 mod_dav
将无法仅从路径名中找到存储库的根目录。第三方提供程序(例如 Subversion 的 mod_dav_svn)可能无法在没有正确存储库根目录的情况下处理请求。
要允许提供程序在这样的配置中正常工作,必须使用 DavBasePath
。
<LocationMatch "^/repos/"> Dav svn DavBasePath /repos SVNParentPath /var/svn </LocationMatch>
描述 | 允许 PROPFIND,Depth: Infinity 请求 |
---|---|
语法 | DavDepthInfinity on|off |
默认值 | DavDepthInfinity off |
上下文 | 服务器配置、虚拟主机、目录 |
状态 | 扩展 |
模块 | mod_dav |
使用 DavDepthInfinity
指令允许处理包含标题“Depth: Infinity”的 PROPFIND
请求。由于此类请求可能构成拒绝服务攻击,因此默认情况下不允许它。
描述 | 服务器在 DAV 资源上保持锁定的最短时间 |
---|---|
语法 | DavMinTimeout seconds |
默认值 | DavMinTimeout 0 |
上下文 | 服务器配置、虚拟主机、目录 |
状态 | 扩展 |
模块 | mod_dav |
当客户端请求 DAV 资源锁时,它还可以指定服务器将自动删除锁的时间。此值只是一个请求,服务器可以忽略它或通知客户端任意值。
使用 DavMinTimeout
指令以秒为单位指定要返回给客户端的最小锁定超时时间。Microsoft Web Folders 默认超时时间为 120 秒;DavMinTimeout
可以将其覆盖为更高的值(例如 600 秒)以减少客户端由于网络延迟而丢失锁的可能性。
<Location "/MSWord"> DavMinTimeout 600 </Location>