This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
software:nginx:webdav [2015/06/30 01:53] – [Nginx and Microsoft Windows WebClient (WebDav)] root | software:nginx:webdav [2022/02/05 04:30] (current) – root | ||
---|---|---|---|
Line 5: | Line 5: | ||
SAMB-у в принципе тоже без VPN можно пробросить, | SAMB-у в принципе тоже без VPN можно пробросить, | ||
- | Nginx в базовом функционале имеет не полную поддержку | + | Nginx в базовом функционале имеет не полную поддержку |
- | Расширить его ещё двумя: PROPFIND и OPTIONS можно с помощью | + | Расширить его ещё двумя: PROPFIND и OPTIONS можно с помощью |
- | Для работы потребуется Nginx собранный с поддержкой | + | Для работы потребуется Nginx собранный с поддержкой |
< | < | ||
[x] HTTP_DAV_EXT | [x] HTTP_DAV_EXT | ||
Line 18: | Line 18: | ||
===== Проблема 1 - Майкрософт нарушает стандарты и свои обещания ===== | ===== Проблема 1 - Майкрософт нарушает стандарты и свои обещания ===== | ||
- | {{:ru: | + | {{: |
Перед тем как создать файл WebDav клиент проверяет наличие файла посылая запрос: | Перед тем как создать файл WebDav клиент проверяет наличие файла посылая запрос: | ||
Line 93: | Line 93: | ||
===== Проблема 2 - PROPPATCH отсутствует в nginx ===== | ===== Проблема 2 - PROPPATCH отсутствует в nginx ===== | ||
- | {{:ru: | + | {{: |
WebDav от мс очень хочет метод PROPPATCH, которого в Nginx и расширениях нет. Совсем нет.\\ | WebDav от мс очень хочет метод PROPPATCH, которого в Nginx и расширениях нет. Совсем нет.\\ | ||
Я рассматривал два варианта решения: | Я рассматривал два варианта решения: | ||
Line 137: | Line 137: | ||
===== Проблема 3 - создание папок ===== | ===== Проблема 3 - создание папок ===== | ||
- | {{:ru: | + | {{: |
См п1 :) | См п1 :) | ||
Line 212: | Line 212: | ||
- | ===== Проблема 5 - переименование ===== | + | ===== Проблема 5 - копирование и переименование ===== |
Ноги тут те же что и в п4: отсутствие слеша на конце урла и в Destination заголовке.\\ | Ноги тут те же что и в п4: отсутствие слеша на конце урла и в Destination заголовке.\\ | ||
Для решения проблемы с добавлением "/" | Для решения проблемы с добавлением "/" | ||
**Фикс 6**: | **Фикс 6**: | ||
- | < | + | < |
+ | 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; |
}</ | }</ | ||
- | Если кратко, | + | |
Line 242: | Line 245: | ||
< | < | ||
if ($request_method = OPTIONS) { | if ($request_method = OPTIONS) { | ||
- | add_header Allow ' | + | add_header Allow ' |
add_header DAV '1, 2'; | add_header DAV '1, 2'; | ||
return 200; | return 200; | ||
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; | + | 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 " | ||
+ | auth_basic_user_file / | ||
open_file_cache off; | open_file_cache off; | ||
Line 327: | Line 336: | ||
location @delete_handler { | location @delete_handler { | ||
internal; | internal; | ||
+ | |||
+ | auth_basic " | ||
+ | auth_basic_user_file / | ||
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 " | ||
+ | auth_basic_user_file / | ||
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: | ||
- в папке "/ | - в папке "/ | ||
- location ^~ **/Family** - означает что клиент должен использовать URL: https:// | - location ^~ **/Family** - означает что клиент должен использовать URL: https:// | ||
+ | - директивы **auth_basic** и **auth_basic_user_file** должны быть в каждом **location** который осуществляет обработку запросов, | ||
Line 387: | Line 403: | ||
+ | ===== Полезное ===== | ||
+ | * Дальнейшая разработка решения происходит тут: [[https:// | ||
+ | * Патч [[https:// | ||
+ | |||
+ | |||
+ | |||
+ | {{tag> |