Site Tools


software:nginx:webdav

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
software:nginx:webdav [2015/07/01 01:01]
– [Nginx and Microsoft Windows WebClient (WebDav)] root
software:nginx:webdav [2022/02/05 04:30] (current)
root
Line 6: Line 6:
  
 Nginx в базовом функционале имеет не полную поддержку [[http://nginx.org/ru/docs/http/ngx_http_dav_module.html|Dav]]: PUT DELETE MKCOL COPY MOVE.\\ Nginx в базовом функционале имеет не полную поддержку [[http://nginx.org/ru/docs/http/ngx_http_dav_module.html|Dav]]: PUT DELETE MKCOL COPY MOVE.\\
-Расширить его ещё двумя: PROPFIND и OPTIONS можно с помощью плагина: [[https://github.com/arut/nginx-dav-ext-module|dav-ext]]\\+Расширить его ещё двумя: PROPFIND и OPTIONS можно с помощью модуля: [[https://github.com/arut/nginx-dav-ext-module|dav-ext]]\\
  
  
-Для работы потребуется Nginx собранный с поддержкой [[http://nginx.org/ru/docs/http/ngx_http_dav_module.html|Dav]], [[https://github.com/arut/nginx-dav-ext-module|dav-ext]] модулем, rewrite и [[http://wiki.nginx.org/HttpHeadersMoreModule|headers_more]].\\+Для работы потребуется Nginx собранный с поддержкой [[http://nginx.org/ru/docs/http/ngx_http_dav_module.html|Dav]], [[https://github.com/arut/nginx-dav-ext-module|dav-ext]], [[http://nginx.org/ru/docs/http/ngx_http_rewrite_module.html|rewrite]] и [[http://wiki.nginx.org/HttpHeadersMoreModule|headers_more]].\\
 <code>[x] HTTP_DAV              Enable http_webdav module <code>[x] HTTP_DAV              Enable http_webdav module
 [x] HTTP_DAV_EXT          3rd party webdav_ext module [x] HTTP_DAV_EXT          3rd party webdav_ext module
Line 18: Line 18:
  
 ===== Проблема 1 - Майкрософт нарушает стандарты и свои обещания ===== ===== Проблема 1 - Майкрософт нарушает стандарты и свои обещания =====
-{{:ru:software:nginx:webdav1.png|}}+{{:software:nginx:webdav1.png|}}
  
 Перед тем как создать файл WebDav клиент проверяет наличие файла посылая запрос: Перед тем как создать файл WebDav клиент проверяет наличие файла посылая запрос:
Line 93: Line 93:
  
 ===== Проблема 2 - PROPPATCH отсутствует в nginx ===== ===== Проблема 2 - PROPPATCH отсутствует в nginx =====
-{{:ru:software:nginx:webdav2.png|}} \\+{{:software:nginx:webdav2.png|}} \\
 WebDav от мс очень хочет метод PROPPATCH, которого в Nginx и расширениях нет. Совсем нет.\\ WebDav от мс очень хочет метод PROPPATCH, которого в Nginx и расширениях нет. Совсем нет.\\
 Я рассматривал два варианта решения:\\ Я рассматривал два варианта решения:\\
Line 137: Line 137:
  
 ===== Проблема 3 - создание папок ===== ===== Проблема 3 - создание папок =====
-{{:ru:software:nginx:webdav3.png|}} \\+{{:software:nginx:webdav3.png|}} \\
 См п1 :) См п1 :)
  
Line 212: Line 212:
  
  
-===== Проблема 5 - переименование =====+===== Проблема 5 - копирование и переименование =====
 Ноги тут те же что и в п4: отсутствие слеша на конце урла и в Destination заголовке.\\ Ноги тут те же что и в п4: отсутствие слеша на конце урла и в Destination заголовке.\\
 Для решения проблемы с добавлением "/" в заголовок Destinaton нам потребуется модуль headers_more.\\ Для решения проблемы с добавлением "/" в заголовок Destinaton нам потребуется модуль headers_more.\\
  
 **Фикс 6**: **Фикс 6**:
-<code>error_page 597 = @move_handler;+<code>error_page 597 = @copy_move_handler; 
 +if ($request_method = COPY) { 
 + return 597; 
 +}
 if ($request_method = MOVE) { if ($request_method = MOVE) {
  return 597;  return 597;
 } }
  
-location @move_handler {+location @copy_move_handler {
  internal;  internal;
  
Line 231: Line 234:
  }  }
  root $webdav_root;  root $webdav_root;
- dav_methods MOVE;+ dav_methods COPY MOVE;
 }</code> }</code>
-Если кратко, то переносим обработку DELETE в отдельный локейшин (процедуру), дальше проверяем, если удаляется папка то добавляем слеш.\\+
  
  
Line 284: Line 287:
  error_page 599 = @propfind_handler;  error_page 599 = @propfind_handler;
  error_page 598 = @delete_handler;  error_page 598 = @delete_handler;
- error_page 597 = @move_handler;+ error_page 597 = @copy_move_handler;
  open_file_cache off;  open_file_cache off;
  client_max_body_size 50m;  client_max_body_size 50m;
Line 300: Line 303:
  if ($request_method = DELETE) {  if ($request_method = DELETE) {
  return 598;  return 598;
 + }
 + if ($request_method = COPY) {
 + return 597;
  }  }
  if ($request_method = MOVE) {  if ($request_method = MOVE) {
Line 305: Line 311:
  }  }
  
- dav_methods PUT MKCOL; # COPY+ dav_methods PUT MKCOL;
  dav_ext_methods OPTIONS;  dav_ext_methods OPTIONS;
  create_full_put_path on;  create_full_put_path on;
Line 317: Line 323:
 location @propfind_handler { location @propfind_handler {
  internal;  internal;
 +
 + auth_basic "Private site";
 + auth_basic_user_file /usr/local/etc/nginx/secure/authbasic.htpasswd;
  
  open_file_cache off;  open_file_cache off;
Line 327: Line 336:
 location @delete_handler { location @delete_handler {
  internal;  internal;
 +
 + auth_basic "Private site";
 + auth_basic_user_file /usr/local/etc/nginx/secure/authbasic.htpasswd;
  
  open_file_cache off;  open_file_cache off;
Line 335: Line 347:
  dav_methods DELETE;  dav_methods DELETE;
 } }
-location @move_handler {+location @copy_move_handler {
  internal;  internal;
 +
 + auth_basic "Private site";
 + auth_basic_user_file /usr/local/etc/nginx/secure/authbasic.htpasswd;
  
  open_file_cache off;  open_file_cache off;
Line 344: Line 359:
  }  }
  root $webdav_root;  root $webdav_root;
- dav_methods MOVE;+ dav_methods COPY MOVE;
 } }
 location / { location / {
Line 361: Line 376:
   - в папке "/mnt/WebDav_folder" должна существовать папка Family   - в папке "/mnt/WebDav_folder" должна существовать папка Family
   - location ^~ **/Family** - означает что клиент должен использовать URL: https://SERVER_ADDRESS**/Family**   - location ^~ **/Family** - означает что клиент должен использовать URL: https://SERVER_ADDRESS**/Family**
 +  - директивы **auth_basic** и **auth_basic_user_file** должны быть в каждом **location** который осуществляет обработку запросов, см [[https://github.com/dgraziotin/docker-nginx-webdav-nononsense/issues/15|DELETE requests work unauthenticated]]
  
  
Line 387: Line 403:
  
  
 +===== Полезное =====
 +  * Дальнейшая разработка решения происходит тут: [[https://github.com/dgraziotin/docker-nginx-webdav-nononsense|docker-nginx-webdav-nononsense]] - настоятельно рекомендую хотя бы посмотреть все решения которые там применены
 +  * Патч [[https://github.com/arut/nginx-dav-ext-module/pull/56|Fix PROPFIND fail with 500 on simlinks to non exist file/dir.]]
 +
 +
 +
 +{{tag>software howto windows net nginx WebDAV}}
software/nginx/webdav.1435712497.txt.gz · Last modified: 2015/07/01 01:01 by root