现在,我有一台机器开启了 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;
}