nginx 代理 webdav 服务

现在,我有一台机器开启了 webdav 服务,然后我想在另一台设备上通过 nginx 代理这台设备的 webdav 访问。关于 nginx 开启 webdav 支持倒是有很多文章,但我这里只是需要代理。

webdav 是基于 HTTP 的扩展,nginx 没有默认支持 webdav 的所有请求方式,为此,需要 headers-more-nginx-module 模块支持。

首先,下载该模块,然后配置编译配置文件——我的是 lnmp,配置文件是 lnmp 源文件目录下的 lnmp.conf。

Download_Mirror='https://soft.vpser.net'

Nginx_Modules_Options='--add-module=/root/lnmp1.8/src/headers-more-nginx-module'
PHP_Modules_Options=''

##MySQL/MariaDB database directory##
MySQL_Data_Dir='/usr/local/mysql/var'
MariaDB_Data_Dir='/usr/local/mariadb/var'
##Default website home directory##
Default_Website_Dir='/home/wwwroot/default'

Enable_Nginx_Openssl='y'
Enable_PHP_Fileinfo='n'
Enable_Nginx_Lua='n'
Enable_Swap='y'

Nginx_Modules_Options 后面就是添加的模块。

然后执行命令:./upgrade.sh nginx

之后,nginx 的 web 配置文件 location 部分如下:

location /
{
    # 解决webdav不能创建文件夹问题
    if ($request_method = MKCOL) {
        rewrite ^(.*[^/])$ $1/ break;
    }

    # 解决webdav不能重命名问题
    if (-d $request_filename) {
        rewrite ^(.*[^/])$ $1/;
        set $webdav_dest $webdav_dest/;
        more_set_input_headers 'Destination: $webdav_dest';
    }

    # 解决webdav不能复制、移动文件问题
    if ($request_method ~ (MOVE|COPY)) {
        more_set_input_headers 'Destination: $webdav_dest';
    }

    proxy_pass http://ip:port;
    proxy_redirect $host/ $http_host/;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
}