WALL-E

我的经历,感受和想法

使用nginx建立WebDAV服务器

当时这个事情研究了差不多一个下午。。。花那么长时间的确是因为自己姿势水平不够,对nginx不够熟悉,不过为什么中文的相关资料这么少?是因为nginx用得比较少,还是没有建WebDAV的需求,还是这件事情太简单了都没人愿意说说?真是郁闷。

我的目标是使用nginx建立一个WebDAV服务器,可以进行上传下载等基本的操作,需要有基于用户名和密码的身份验证。由于HTTP访问时的根目录已经有内容了,需要将WebDAV服务器通过某个“子目录”来访问或者通过80以外的端口访问。主要参考了官方文档和《nginx webdav配置》这篇文章。

前期准备:如果是通过apt-get安装的nginx,默认已经包含了webdav模块。如果是通过源码编译的,需要在编译时候指定参数:

./configure --with-http_dav_module

通过webdav/这个“子目录”来访问:


location /webdav/ {
    alias /usr/share/webdav/;
    autoindex on;
    dav_methods PUT DELETE MKCOL COPY MOVE;
    dav_ext_methods PROPFIND OPTIONS;
    create_full_put_path on;
    dav_access user:rw group:r all:r;
    auth_basic "Authorized Users Only";
    auth_basic_user_file /usr/lib/squid/passwd;
}

alias后面是文件所在位置,设置autoindex on是为了通过网页访问时可以直接显示索引;create_full_put_path官方的说明为“默认情况下,Put 方法只能在已存在的目录里创建文件。当然了Nginx 必须得有这个目录的修改和写入权限”; auth_basic是提示信息;auth_basic_user_file用于存放加密后的用户名和密码的文件,通过htpasswd命令生成。如果这个工具不存在的话需要安装apache2-utils。

通过端口号访问:新建一个server,其它的基本和前面一样:


server {
    listen 9234;
    error_page 404 /404;
    error_page 503 /503;

    location / {
        root /usr/share/webdav;
        autoindex on;
        dav_methods PUT DELETE MKCOL COPY MOVE;
        dav_ext_methods PROPFIND OPTIONS;
        create_full_put_path on;
        dav_access user:rw group:r all:r;
        auth_basic "Authorized Users Only";
        auth_basic_user_file /usr/lib/squid/passwd;
    }
}