使用下面的配置,GET、PUT、MKCOL 和其他东西可以正常工作,但 MOVE 和 COPY 则不行。
server {
listen 80 ;
listen [::]:80 ;
server_name _;
root /var/www/html;
charset utf-8;
error_log /var/log/nginx/error.log debug;
rewrite_log on;
auth_pam "WebDav auth";
auth_pam_service_name "nginx";
location /dav/ {
autoindex on;
client_body_temp_path /var/www/tmp;
rewrite ^/dav/(.*)$ /dav/$remote_user/$1 break;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS;
dav_access user:rw group:rw all:r;
create_full_put_path on;
}
}
调试日志显示“http copy to”未被重写,然后无法打开它,返回 500 错误。我想我需要重写目标 http 请求标头并尝试以下方法:
set $destination $http_destination;
if ($destination ~ ^(http://www.foobar.test/dav)/(.*)$) {
set $destination $1/$remote_user/$2;
set $http_destination $destination;
}
但这也不起作用。你能告诉我如何使用重写指令来操作 WebDav 吗?
答案1
抱歉打扰了。可以使用以下方法自行解决标头-更多-nginx-模块. 整个简单配置是:
server {
listen 80 ;
listen [::]:80 ;
server_name _;
root /var/www/html;
charset utf-8;
auth_pam "WebDav auth";
auth_pam_service_name "nginx";
location /dav/ {
set $destination $http_destination;
if ($destination ~ ^(http://www.foobar.test/dav)/(.*)$) {
set $destination $1/$remote_user/$2;
more_set_input_headers "Destination: $destination";
}
rewrite ^/dav/(.*)$ /dav/$remote_user/$1 break;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS;
dav_access user:rw group:rw all:r;
create_full_put_path on;
}
}
答案2
谢谢你。我在使用 NGINX 作为 https 代理来通过 http 运行 WebDAV 的后端 IIS 服务器时也遇到了类似的问题。
传递的 MOVE 请求中的目标标头是 https:// 地址,但我从后端服务器收到 400 错误,因为它运行在 http 上。我需要将目标标头从 https:// 修改为 http://,因此使用了以下内容
set $destination $http_destination;
if ($destination ~ ^(https://webdav.mydomain.com)/(.*)$) {
set $destination "http://webdav.mydomain.com/$2";
more_set_input_headers "Destination: $destination";
}
这允许成功的 MOVE 请求