server { server_name media.maksim-pankov.ru; set $webdav_root "/data/services/media_data/"; location / { root $webdav_root; error_page 599 = @propfind_handler; error_page 598 = @delete_handler; chunked_transfer_encoding on; open_file_cache off; client_max_body_size 5g; add_header Allow 'OPTIONS, GET, HEAD, PROPFIND'; if ($request_method = PROPFIND) { return 599; } if ($request_method = PROPPATCH) { # Unsupported, allways return OK. add_header Content-Type 'text/xml'; return 207 'HTTP/1.1 200 OK'; } if ($request_method = MKCOL) { # Microsoft specific handle: add trailing slash. rewrite ^(.*[^/])$ $1/; } # if ($request_method = DELETE) { # return 598; # } if ($request_method = OPTIONS) { add_header Allow 'OPTIONS, GET, HEAD, PROPFIND, PROPPATCH, LOCK, UNLOCK'; add_header DAV '1, 2'; return 200; } dav_ext_methods OPTIONS; create_full_put_path on; dav_access user:r group:r all:r; autoindex on; charset utf-8; auth_basic "Media Server"; auth_basic_user_file /etc/nginx/htpasswd; } location @propfind_handler { internal; open_file_cache off; if (!-e $webdav_root/$uri) { # Microsoft specific handle. return 404; } root $webdav_root; dav_ext_methods PROPFIND; } location @delete_handler { internal; open_file_cache off; if (-d $webdav_root/$uri) { # Add trailing slash to dirs. rewrite ^(.*[^/])$ $1/; } root $webdav_root; dav_methods DELETE; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/media.maksim-pankov.ru/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/media.maksim-pankov.ru/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = media.maksim-pankov.ru) { return 301 https://$host$request_uri; } # managed by Certbot server_name media.maksim-pankov.ru; listen 80; return 404; # managed by Certbot }