Con las configuraciones siguientes, GET, PUT, MKCOL y demás funcionan bien, pero MOVE y COPY no.
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;
}
}
El registro de depuración indica que 'copia http a' no se reescribió, luego no se pudo abrir y devuelve el error 500. Creo que necesito reescribir el encabezado de la solicitud http de destino y probarlo de la siguiente manera:
set $destination $http_destination;
if ($destination ~ ^(http://www.foobar.test/dav)/(.*)$) {
set $destination $1/$remote_user/$2;
set $http_destination $destination;
}
pero tampoco funciona. ¿Podría decirme cómo funciona WebDav con la directiva de reescritura?
Respuesta1
Perdón por el ruido. auto resuelto, usandoencabezados-más-módulo-nginx. La configuración completamente simple es:
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;
}
}
Respuesta2
Gracias por esto. Tuve un problema similar al usar NGINX como proxy https para el servidor IIS backend que ejecuta WebDAV a través de http.
El encabezado de destino en la solicitud MOVE que se estaba pasando era la dirección https:// pero recibí un error 400 del servidor backend ya que se estaba ejecutando a través de http. Necesitaba modificar el encabezado de Destino de https:// a http://, así que usé lo siguiente
set $destination $http_destination;
if ($destination ~ ^(https://webdav.mydomain.com)/(.*)$) {
set $destination "http://webdav.mydomain.com/$2";
more_set_input_headers "Destination: $destination";
}
Esto permitió solicitudes MOVE exitosas