Com as configurações abaixo, GET, PUT, MKCOL e outras coisas funcionam bem, mas MOVE e COPY não.
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;
}
}
O log de depuração informa que 'http copy to' não foi reescrito e, em seguida, falhou ao abri-lo e retorna o erro 500. Acho que preciso reescrever o cabeçalho da solicitação http de destino e tentar:
set $destination $http_destination;
if ($destination ~ ^(http://www.foobar.test/dav)/(.*)$) {
set $destination $1/$remote_user/$2;
set $http_destination $destination;
}
mas também não funciona. Você poderia me dizer como trabalhar o WebDav com a diretiva rewrite?
Responder1
Desculpe pelo barulho. auto-resolvido, usandocabeçalhos-mais-módulo nginx. Toda a configuração simples é:
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;
}
}
Responder2
Obrigado por isso. Tive um problema semelhante ao usar o NGINX como um proxy https para back-end do servidor IIS executando WebDAV sobre http.
O cabeçalho de destino na solicitação MOVE que estava sendo passada era o endereço https://, mas eu estava recebendo um erro 400 do servidor back-end, pois ele estava sendo executado em http. Eu precisava modificar o cabeçalho Destination de https:// para http://, então usei o seguinte
set $destination $http_destination;
if ($destination ~ ^(https://webdav.mydomain.com)/(.*)$) {
set $destination "http://webdav.mydomain.com/$2";
more_set_input_headers "Destination: $destination";
}
Isso permitiu solicitações MOVE bem-sucedidas