mholt / caddy-webdav

WebDAV handler module for Caddy
Apache License 2.0
228 stars 24 forks source link
caddy webdav webdav-server

WebDAV for Caddy

This package implements a simple WebDAV handler module for Caddy.

[!NOTE] This is not an official repository of the Caddy Web Server organization.

Syntax

webdav [<matcher>] {
    root <path>
    prefix <request-base-path>
}

Because this directive does not come standard with Caddy, you need to put the directive in order. The correct place is up to you, but usually putting it near the end works if no other terminal directives match the same requests. It's common to pair a webdav handler with a file_server, so ordering it just before is often a good choice:

{
    order webdav before file_server
}

Alternatively, you may use route to order it the way you want. For example:

localhost

root * /srv

route {
    rewrite /dav /dav/
    webdav /dav/* {
        prefix /dav
    }
    file_server
}

The prefix directive is optional but has to be used if a webdav share is used in combination with matchers or path manipulations. This is because webdav uses absolute paths in its response. There exist a similar issue when using reverse proxies, see The "subfolder problem", OR, "why can't I reverse proxy my app into a subfolder?".

webdav /some/path/match/* {
    root /path
    prefix /some/path/match
}

If you want to serve WebDAV and directory listing under same path (similar behaviour as in Apache and Nginx), you may use Request Matchers to filter out GET requests and pass those to file_server.

Example with authenticated WebDAV and directory listing under the same path:

@get method GET

route {
    basicauth {
        username hashed_password_base64
    }
    file_server @get browse
    webdav
}

Or, if you want to create a public listing, but keep WebDAV behind authentication:

@notget not method GET

route @notget {
    basicauth {
        username hashed_password_base64
    }
    webdav
}
file_server browse

Credit

Special thanks to @hacdias for making caddy-webdav for Caddy 1, from which this work is derived: https://github.com/hacdias/caddy-webdav