代码改变世界

Ubuntu 9.10 Server 配置Apache + WebDav 实现文档协同管理

2010-06-01 16:36  BAsil  阅读(2195)  评论(1编辑  收藏  举报

先来了解一下百度百科关于WebDav(Web-based Distributed Authoring and Versioning)的解释

一种基于 HTTP 1.1协议的通信协议.它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可直接对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。

下面来看如何实现文档的协同管理

1安装软件及模块一览

  (1)Apache2.2.14  自己下载编译。未用ubuntu 9.10 server 下apt-get安装的apache2 是因为这个版本的apache2在启用ssl的时候总是报undefined symbol apr_ldap_ssl_init错误,此处我怀疑可能是ubuntu9.10 server的问题,我在虚拟机ubuntu 8.04 desktop下配置成功。

2 加载Dav Module

     在对Apache进行编译时已经开启了dav的设置(具体参见Ubuntu 9.10 Server 配置基于SSL的Subversion,svn需要webdav协议支持)

#sudo ./configure   –enable-dav –enable-dav-fs –enable-so   
                    –enable-ssl –enable-maintainer-mode -prefix=/usr/local/apache2   
                    –enable-mods-shared=all   

      注意enable-dav和enable-dav-fs是我们文档协同所需要的。我们可以通过    

cd /usr/local/apache2/bin 
sudo ./httpd -l

      来查看已加载的Module。另外自主编译的方式无法通过修改httpd.conf,加入

LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so

      来完成,modules文件夹下也没有这两个so文件,启动apache后会报文件已加载,我搞了很长时间才明白这点。

3 配置WebDav

   在httpd.conf文件下 将#Include conf/extra/httpd-dav.conf的注释去掉,我们来看一下httpd-dav.conf的配置

DavLockDB "/usr/local/apache2/var/DavLock"

Alias /uploads "/usr/local/apache2/uploads"

<Directory "/usr/local/apache2/uploads">
    Dav On
    Options Indexes FollowSymLinks
    Order Allow,Deny
    Allow from all

    AuthType Basic
    AuthName DAV-upload
    Require valid-user
    # You can use the htpasswd program to create the password database:
    #   htpasswd -c "/usr/local/apache2/user.passwd" DAV-upload admin
    AuthUserFile "/svn/authfile" 
    <Limit GET OPTIONS PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
    </Limit>
</Directory>

注意一定是Allow from all 另外我使用了Basic的验证方法,要求用户验证;这里Subversion和WebDav使用的是同样的用户文件;Options Indexes FollowSymLinks允许我们在浏览器访问时遍历文件。

4 权限

   #cd /usr/local/apache2
   #sudo mkdir uploads
   #sudo chown www-data:www-data uploads
   #sudo chmod 777 uploads
   以上创建上传目录并设置权限为可读可写  www-data为ubuntu的用户和组

   另外可能需要手动创建 DavLockDB
   #cd /usr/local/apache2
   #sudo mkdir var
   #cd var
   #sudo vim DavLock
   #cd ..
   #cd ..
   #sudo chown www-data:www-data uploads
   #sudo chmod -R 777 var/

5 WebDav客户端

  分别使用了XP和Vista自带的web folder

   使用方法,在XP的资源管理器下选择增加网上邻居(Vista为添加一个网络位置)输入http://your ip or sitename/uploads  并输入用户名和密码。然后再word里就可以直接对文件进行增加修改了,而且当一个用户在更改的时候,其他用户只能只读访问。

   webfolder

当一个用户打开某文件,会加一个只读锁,其他的用户打开该文件时提示

conflict

最后附上fiddler抓到的http包,(webdav协议是http协议的扩展,所以可以观察到)

HTTP/1.1 207 Multi-Status
Date: Tue, 01 Jun 2010 08:30:34 GMT
Server: Apache/2.2.14 (Unix) mod_ssl/2.2.14 OpenSSL/0.9.8g DAV/2 SVN/1.6.2
Content-Length: 966
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/xml; charset="utf-8"

<?xml version="1.0" encoding="utf-8"?>
<D:multistatus xmlns:D="DAV:">
<D:response xmlns:lp1="DAV:" xmlns:lp3="http://subversion.tigris.org/xmlns/dav/" xmlns:lp2="http://apache.org/dav/props/">
<D:href>/uploads/blackjack/Post.doc</D:href>
<D:propstat>
<D:prop>
<lp1:resourcetype/>
<lp1:creationdate>2010-06-01T06:11:10Z</lp1:creationdate>
<lp1:getcontentlength>46080</lp1:getcontentlength>
<lp1:getlastmodified>Tue, 01 Jun 2010 06:11:10 GMT</lp1:getlastmodified>
<lp1:getetag>"23a06-b400-487f1d6fea216"</lp1:getetag>
<lp2:executable>F</lp2:executable>
<D:supportedlock>
<D:lockentry>
<D:lockscope><D:exclusive/></D:lockscope>
<D:locktype><D:write/></D:locktype>
</D:lockentry>
<D:lockentry>
<D:lockscope><D:shared/></D:lockscope>
<D:locktype><D:write/></D:locktype>
</D:lockentry>
</D:supportedlock>
<D:lockdiscovery/>
<D:getcontenttype>application/msword</D:getcontenttype>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>