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