Giter Club home page Giter Club logo

docker-nginx-webdav-nononsense's Introduction

README

docker-nginx-webdav-nononsense aims to be a Docker image that enables a no-nonsense WebDAV system on the latest available nginx, stable and mainline.

The image, and resulting container, is designed to run behind a reverse proxy (e.g., the great jc21/nginx-proxy-manager) to handle SSL. So, it runs on port 80 internally.

Why no-nonsense?

I'm taking it lightly: my own project is no-nonsense to me ;-) there is nothing wrong with other projects.

Here is what I think sets it apart from other nginx Docker images.

Settings

Mount any of these two volumes:

  • ./path/to/dir:/data is the root folder that nginx will serve for WebDAV content (/data).
  • ./config:/config contains useful configuration files for nginx as well as the overall container. If you mount /config to an empty folder, the folder will be initialized with default empty files that you will be able to edit. See the next section for more information.

These are environment variables you can set, and what they do.

  • PUID=1000 user id with read/write access to ./path/to/dir:/data volume. Nginx will use the same to be able to read/write to the folder.
  • PGID=1000 group id with read/write access to ./path/to/dir:/data volume. Nginx will use the same to be able to read/write to the folder.
  • TZ=Europe/Berlin specifies timezone for the underlying GNU/Linux system.
  • WEBDAV_USERNAME=user to set a single username to access WebDAV. Ignored if WEBDAV_PASSWORDis not set, ignored if /config/nginx/htpasswd is provided.
  • WEBDAV_PASSWORD=password to set the password to the single username to access WebDAV. Ignored if WEBDAV_USERNAMEis not set, ignored if /config/nginx/htpasswd is provided.
  • SERVER_NAMES=localhost,ineed.coffee comma separated hostnames for the server.
  • TIMEOUTS_S=1200 expressed as seconds, sets at the same time various nginx timeouts: send_timeout, client_body_timeout, keepalive_timeout, lingering_timeout.
  • CLIENT_MAX_BODY_SIZE=120M limits file upload size to the expressed value, which must end wither with M(egabytes) or G(igabytes).

The /config volume

The container path /config is configured as unnamed/anonymous volume. Besides that, it contains the following paths and files:

  • /config/custom-cont-init.d to host your own custom scripts that run at startup.
  • /config/custom-services.d to host your own service files.
  • /config/nginx to host custom configuration files for nginx, namely:
    • /config/nginx/http.conf included at the end of nginx.conf http directive.
    • /config/nginx/server.conf included at the end of nginx.conf server directive.
    • /config/nginx/http.conf included at the end of nginx.conf location directive.

Furthermore, if you provide an htpasswd file at /config/nginx/htpasswd, the container will use it for authentication. Tha htpasswd is the Apache HTTP compatible flat file to register usernames and passwords. If you provide one, you can tell the container who your username and passwords are. Please note that providing an htpasswd file will make the container ignore any supplied env variable WEBDAV_USERNAME and WEBDAV_PASSWORD. Please note that all users have the same access levels. Removing the file at /config/nginx/htpasswd will cause the container to use any provided WEBDAV_USERNAME and WEBDAV_PASSWORD variables.

Optional multi-user support

Multi-user support can be setup with only one container.

Be sure that:

  • There is a htpasswd file with your users and passwords (more details can be found in The /config volume)
  • A folder for each user (named exactly like the username)
  • The right permissions (user/group of the nginx process) for these folders (as set with the env-variable)
  • Add a custom-cont-init.d script:
    • Add a new volume in docker-compose: ./custom-cont-init.d:/custom-cont-init.d (more details can be found in The /config volume)
    • ... with the custom script 40-user_dir (from this repository)
  • (Re-)Create the container: docker-compose up -d --force-recreate nginxwebdav

The log of the container should contain some information about the custom init-script:

cont-init: info: running /etc/cont-init.d/99-custom-files
[custom-init] Files found, executing
[custom-init] 40-user_dir: executing...
change root from /data to /data/$remote_user
[custom-init] 40-user_dir: exited 0
cont-init: info: /etc/cont-init.d/99-custom-files exited 0

WebDAV with basic login and custom folders per user tested with the integrated web-client, Filestash.app, Dolphin (KDE file manager; How-To from NextCloud documentation) and Linux mount (davfs; How-To from NextCloud documentation).

Usage

Quick test

You can test this image quickly under the following assumptions:

  1. Data is saved on your host machine's ./dav1 folder,
  2. WebDAV is accessed by a user user1 with password password1,
  3. WebDAV is accessed on the host machine and port 8080: 127.0.0.1:8080.
docker container run --rm \
  -p 127.0.0.1:8080:80 \
  -v ./dav1:/data \
  -e WEBDAV_USERNAME=user1 \
  -e WEBDAV_PASSWORD=password1 \
  -e PUID=1000 \
  -e PGID=1000 \
  dgraziotin/nginx-webdav-nononsense

Then you can visit the server using http://127.0.0.1:8080.

You can exit the quick test by hitting CTRL-C. The container will exit and be removed.

Building the image or running it

  • Clone this repository, edit the included docker-compose.yml, and run docker-compose build && docker-compose up to build and run the container. Access it from http://localhost:32080; or
  • Build the Dockerfile and run the container with docker; or
  • Pull and run my docker image dgraziotin/nginx-webdav-nononsense and use it with docker-compose or docker.

If you are using a reverse proxy (you should!), and the reverse proxy is containerized, do not forget to connect the container to the reverse proxy with a network. Follow the instructions of your reverse proxy.

With jc21/nginx-proxy-manager, I add the following to the docker-compose.yml:

networks:
    default:
       external:
         name: reverseproxy

Consider also un-exposing the port if you use a reverse proxy.

Kindly note that this project is proxy-independent and requires you to be knowledgeable about reverse proxy to be used properly. 

A reverse proxy, if misconfigured, could become the weaker link that prevents proper functioning of the WebDAV functionalities. 

Examples include having the reverse configured with values for timeouts or max body size that are less than the one nginx-webdav-nononsense uses.

Some proxies might not forward important headers from-and-to nginx-webdav-nononsense, and you may need to whitelist these headers manually. Finally, a reminder that Cloudfare is a reverse proxy with its settings and limitations (example), some of which cannot be changed.

Feature requests

I will add features if I happen to need them. To name one, I do not need native SSL support, because I use a reverse proxy. However, I welcome pull requests.

Contributing to the Dockerfile

I use a small build system (refer to build.sh) that generates and updates the Dockerfile with each new release of nginx. Dockerfiles are updated based on Dockerfile.template.

If you plan to submit a pull request that modifies a Dockerfile, please ensure that you make the changes on Dockerfile.template.

Credits

Many thanks to dotWee for adding awesome CI features to the repo.

Credits to FlorianEndel for the optional multi-user support.

docker-nginx-webdav-nononsense's People

Contributors

davidmikesimon avatar dependabot[bot] avatar dgraziotin avatar dotwee avatar dqhl76 avatar florianendel avatar fyears avatar guillaumelamirand avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

docker-nginx-webdav-nononsense's Issues

Get an 409 conflict error when I try to upload a file

Looks like nginx is having some problems with accessing the folder
PGID | 1000
PUID | 1000
should be fine and work for all other containers.

Nevertheless I get this weird error message when I want to upload/create a file in the main /data folder.

2022-05-17 at 16 40 36 - Sync

DELETE requests work unauthenticated

A DELETE https://domain.com/ will return 403 Forbidden but actually delete any file (non directory) at the root.

The logs will show that the root folder cannot be deleted, with permission denied. Yet, any contained file will disappear.

nginxwebdav  | 2021/12/17 13:39:16 [error] 13#13: *1 rmdir() "/data/" failed (13: Permission denied), client: 172.30.0.1, server: localhost, request: "DELETE / HTTP/1.1", host: "myhost.ineed.coffee"
nginxwebdav  | 172.30.0.1 - - [17/Dec/2021:13:39:16 +0100] "DELETE / HTTP/1.1" 403 153 "-" "Paw/3.3.2 (Macintosh; OS X/12.0.1) GCDHTTPRequest

Files with beginning . not writable

I use this docker on openmediavault. It works, but not with Files and Folder with beginning ".".
E.g. Folder ".logging" or File "/User_home/_MigrationMail/var/mail/user/.INBOX._CNC/dovecot-uidlist".

Can I enable this to store?

Tanks

connect to server and/or mount under linux

I'm trying to connect to the webdav server using my ddns url https://my.ddns.domain:0000 file managers require a dav:// (http) or davs:// (https) prefix my url isn't recognized using this format neither using https:// also tried webdav://
i get a failed to open file system , "not a webdav enabled file share"

tried another workaround, mounting it with autofs and davfs2
sudo mount -t davfs https://my.ddns.domain:0000 ~/mountpoint
throws error
/sbin/mount.davfs: mounting failed; the server does not support WebDAV

server is mounted fine under android and windows 10

any ideas appreciated

Last-Modified header

Hello,

Would you consider to add "Last-Modified" header to Access-Control-Allow-Headers?

Some apps, specially "keeweb" needs it to work properly. I use now your image with a modified ngix.conf, but others may benefit from this change.

Thank you,

Error with Microsoft Office 2021: Someone else is working in 'X:\yourfile.xlsx' right now. Please try again later.

Describe the bug
Unable to save Documents from Excel 2021 on the Webdav server.

Please include the exact error messages that your client is reporting:
Someone else is working in 'X:\yourfile.xlsx' right now. Please try again later.

To Reproduce
Steps to reproduce the issue:

  1. Connect drive with Windows 11 mini-redirector using net-use
  2. Save file from Excel 2021 on network drive
  3. Error message

Expected behavior
Save the file on the network drive

Windows/Explorer can't create a new folder

Creating a new folder is unsupported with error message "The request is not supported".

nginx logs:

nginxwebdav    | 172.21.0.1 - - [10/Dec/2021:15:47:38 +0100] "PROPFIND / HTTP/1.1" 207 1495 "-" "Microsoft-WebDAV-MiniRedir/10.0.22000"
nginxwebdav    | 172.21.0.1 - - [10/Dec/2021:15:47:38 +0100] "PROPFIND /New%20folder HTTP/1.1" 404 153 "-" "Microsoft-WebDAV-MiniRedir/10.0.22000"
nginxwebdav    | 172.21.0.1 - - [10/Dec/2021:15:47:38 +0100] "PROPFIND / HTTP/1.1" 207 424 "-" "Microsoft-WebDAV-MiniRedir/10.0.22000"
nginxwebdav    | 172.21.0.1 - - [10/Dec/2021:15:47:38 +0100] "MKCOL /New%20folder HTTP/1.1" 401 179 "-" "Microsoft-WebDAV-MiniRedir/10.0.22000"

macOS Finder works with the following log

nginxwebdav    | 172.21.0.1 - user [10/Dec/2021:15:51:44 +0100] "PROPFIND /untitled%20folder HTTP/1.1" 404 153 "-" "WebDAVFS/3.0.0 (03008000) Darwin/21.1.0 (x86_64)"
nginxwebdav    | 172.21.0.1 - user [10/Dec/2021:15:51:44 +0100] "MKCOL /untitled%20folder HTTP/1.1" 201 0 "-" "WebDAVFS/3.0.0 (03008000) Darwin/21.1.0 (x86_64)"
nginxwebdav    | 172.21.0.1 - user [10/Dec/2021:15:51:44 +0100] "PROPFIND / HTTP/1.1" 207 1389 "-" "WebDAVFS/3.0.0 (03008000) Darwin/21.1.0 (x86_64)"
nginxwebdav    | 172.21.0.1 - user [10/Dec/2021:15:51:44 +0100] "PROPFIND /untitled%20folder/ HTTP/1.1" 207 353 "-" "WebDAVFS/3.0.0 (03008000) Darwin/21.1.0 (x86_64)"

How to change default File Permissions correctly

Hello! I would like to change the Permissions which are assigned to new Files. As of Nginx Documentation this can be done with the dav_access configuration Parameter. I have done this successfull by editing the nginx.conf manually. I am curious if there is a more elegant way for doing this, as editing manual is either not persistent, or is cutting me off of further changes to the File in the Image.

Attempt to reach compliance with litmus

litmus is "a WebDAV server test suite, which aims to test whether a server is compliant with the WebDAV protocol as specified in RFC2518;".

I containerized it under dgraziotin/litmus. It can be run with docker run --rm -it dgraziotin/litmus:0.13 http://ip:port user password.

Current output:

-> running `basic':
 0. init.................. pass
 1. begin................. pass
 2. options............... FAIL (server does not claim WebDAV compliance)
 3. put_get............... pass
 4. put_get_utf8_segment.. pass
 5. put_no_parent......... pass
 6. mkcol_over_plain...... pass
 7. delete................ pass
 8. delete_null........... pass
 9. delete_fragment....... WARNING: DELETE removed collection resource with Request-URI including fragment; unsafe
    ...................... pass (with 1 warning)
10. mkcol................. pass
11. mkcol_again........... pass
12. delete_coll........... pass
13. mkcol_no_parent....... pass
14. mkcol_with_body....... pass
15. finish................ pass
<- summary for `basic': of 16 tests run: 15 passed, 1 failed. 93.8%
-> 1 warning was issued.

Files permissions

Is it possible to change the copied file permissions when copying from remote to server from -rw------- ?

Usecase I sometimes use the copied files in programs like e.g. photo servers (librephotos) and I cant view my asserts unless I change the copied files permissions

I've looked at nginx.conf and cant figure out if this parameter was set

Also google search didnt helped out much

I've seen the "dav_access user:rw group:rw all:r;" parameter but I have no idea where I should put this in the nginx.conf

Thanks

adding a reastart policy to the container

this is more a suggestion not an issue

add a restart policy to the docker-compose.yml
i tried to add a restart: unless-stopped at the end of the file but it throws error when i docker-compose up -d

ERROR: yaml.scanner.ScannerError: while scanning for the next token
found character '\t' that cannot start any token
  in "./docker-compose.yml", line 20, column 21

actually i think it throws error whenever i try to add anything in to the file and "break" its structure?

i added a restart policy by sudo docker update --restart unless-stopped container_name
and
sudo docker inspect container_name tells me

 "RestartPolicy": {
                "Name": "unless-stopped",
                "MaximumRetryCount": 0
            },

so i'm guessing its applied

keep up

[bug] unexpected 403 error caused by permission setting

Thanks for your excellent docker image!

I am trying to use this image to setup a webdav enviroment to test OpenDAL's webdav service.
apache/opendal#2873

However, I face some problems when I want to mount a volume for data like this:

version: '3.8'

services:
  webdav:
    image: dgraziotin/nginx-webdav-nononsense
    ...
     volumes:
      - webdav-data:/data
    ...
volumes:
  webdav-data:

You can check what we actually write this docker compose file in https://github.com/apache/incubator-opendal/pull/2873/files/111e694f7c036cfcc8e92649db9fce28206c8666

The webdav service gave us the 403 Forbidden error. Log: https://github.com/apache/incubator-opendal/actions/runs/5877080995/job/15936499613?pr=2873

Errors may be caused by incorrect permission settings. We try to add a Dockerfile and that solve this problem:

FROM dgraziotin/nginx-webdav-nononsense

RUN chown -R abc:abc /data

We seem need to create the dir and set the permission first before mark it as a volumn.

PROPFIND requests 403

Hi,

I am trying to use this image as a front for MDT deployments to offload the WebDav component to serverless architecture.
However I am getting PROPFIND 403's during deployment:

image

Do you have any idea why this happens?

KR

Add client_max_body_size also to reverse proxy

Hi,

thank you for your great work! I am very happy to have such a well-working nginx webdav container at hand.

I just wanted to leave a note about a small possible documentation update. I am using another nginx container as reverse proxy and I noticed that I needed to also add client_max_body_size to the configuration of the reverse proxy. Otherwise, the proxy would refuse large files with http error 413 Payload Too Large before the file even makes it to the webdav server.

My full reverse proxy config looks like this, so very simple:

server {
    listen          443 ssl http2;
    server_name     xxxx;

    location / {
        set $upstream   "nginxwebdav";
        proxy_pass      http://$upstream;
        proxy_buffering off;
    }

    client_max_body_size 10G;
}

If you agree with this change I could propose a documentation update as a pull request. Just wanted to discuss this first.

Cheers

PUID and PGID settings ignored and userid 911 used instead

Hello,

I cloned this repository edited docker-compose.yml (set PGID, PUID) and executed docker-compose build && docker-compose up but the uploaded/created files were created with a wrong userid.

how to reproduce
clone 9cf381a

  • edit docker-compose.yml (I think only the ids are important)
@@ -8,10 +8,10 @@ services:
             - ./data:/data
-            - ./htpasswd:/etc/nginx/htpasswd
+              #- ./htpasswd:/etc/nginx/htpasswd
         environment:
-            - PUID=501
-            - PGID=20
+            - PUID=1000
+            - PGID=1000
             - TZ=Europe/Berlin
             - WEBDAV_USERNAME=user
-            - WEBDAV_PASSWORD=password
-            - SERVER_NAMES=localhost
+            - WEBDAV_PASSWORD=mysecurepassword
+            - SERVER_NAMES=localhost,mycomputer
             - TIMEOUTS_S=1200 # these are seconds
  • execute docker-compose build && docker-compose up
  • check that group id 1000 has write access to folder ./data
  • upload a file from webdav client
  • ls -l ./data

what I see
the owner id of the uploaded file is 911

what I expect
the owner id of the uploaded file should be 1000

X-Forwarded-For not logged/honored in logs

I'm running the ':latest' release of the container, and I see that the logs show my reverse proxy (haproxy running on another host) as the source IPs. I have the following config in haproxy:

backend webdav
	server [REDACTED] 192.168.1.5:8082
	option forwardfor
	http-request set-header X-Real-IP %[src]

And the proxy logs still seem to show the proxy IP instead of the "real" IP. I confirmed the proxy is sending correct headers with tcpdump. Is there a setting I need to adjust to tell nginx to log those, or do I have to rebuild the container with the tweaked log configuration?

large folder with photos not accessible

i really enjoy this image as it provides a 5 min set up personal cloud really no nonsense.
everything works as it should and i can access and sync my files with my phone.
Only issue i have is that i can't access a large photo folder ~200gb | ~50000 items
i have changed CLIENT_MAX_BODY_SIZE to 300G
and tried to view logs with docker logs --follow 73e7bc2b53cc but it returned nothing
any ideas appreciated
keep up

Unable to connect from Windows 10 WebDAV Client

Hi! First of all, great work, keep it up!

I configured a Container with your Image yesterday. When connecting with WinSCP, everything is working like a charm, however the Windows 10 integrated WebDAV Client can't connect.

image
image

The WebDAV Container is running behind a Nginx reverse Proxy exclusive on a custom Port, see configuration below.

server
{
  listen 10443 ssl;
  server_name wwms.*;

  resolver 127.0.0.11 valid=60s;
  set $webdav_upstream wwms_webdav_1:80;

  ssl_certificate /etc/letsencrypt/live/xxx.xxx.xxx/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/xxx.xxx.xxx/privkey.pem;

  proxy_http_version 1.1;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header X-Forwarded-Host $host;
  proxy_set_header X-Forwarded-Port 10443;
  proxy_set_header X-Frame-Options SAMEORIGIN;

  location /
  {
    proxy_pass http://$webdav_upstream;
  }
}

My compose.yml looks as the following.

  webdav:
    image: dgraziotin/nginx-webdav-nononsense
    restart: unless-stopped
    volumes: 
      - ftp:/data/
      - ~/wwms/webdav/htpasswd:/etc/nginx/htpasswd
    environment:
      - TZ:"Europe/Vienna"
      - PUID:"1000"
      - PGID:"1000"

As I can connect to the Directory Listing via Web Browser and can connect via WinSCP, it seems that the Basic configuration must be okay.

Anything I must configure in Windows (Interet Settings or Registry) in order to get it working?

enable ipv6

I noticed that ipv6 is not enabled because it is missing the listen [::]:80; directive in nginx.conf. Can you enable ipv6 from there? Thanks.

Windows WebDAV Client Support

We are using your Image for some days now, I know that the Windows WebDAV Client is a mess itselfe, but supporting Windows WebDAV is curcial for us, as we need native File Explorer integration for our Project. I would like to help you to find an solve all relevant Problems regarding Windows WebDAV Support. Shall I start one Issue for Windows Support overall, or one Issue for each Problem we face?

After rebooting Windows it is quiet impossible to get WebDAV up and running again. I am getting some generic Error Messages. It works quiet well when it works, but a reboot seems to trigger some Bug which is Hard to Workaround. Removing and readding the Drive, while changing some Parameters seems to get it running again, but I can't figure out what is causing it to work again. It seems as, as long as Windows still knows it is the same WebDAV Server the Issue is present, you need to change config Values until Windows can't determine that it is the same Server.

Permission failed with the var/cache/nginx/* folder using Zotero

I use your docker with Zotero to be able to keep my files uploaded and sync on my server.
I couldn't make it work until I changed the chmod for /var/cache/nginx/* from 700 to 775.
Without that I got permission denied because it tried to push file in that folder.
I use the env variable PUID and GID.
I have no idea if it can be helpful and/or if the code needed to be changed but I thought it was worth mentioning it

Make use of /config

Linuxserver.io images prepare /config so that expected configuration files appear there. Have user-editable configuration files gathered from here.

Multi User with own Folder

Hello,

Is it possible to have multi user with their own folder?

For example,
User Samantha will have folder user1
User Josh will have folder user2

Each user has their own username and password.

If this is possible will be great as additional feature.

Rgds

500 error - /var/cache/nginx/client_temp

In relation to #22

I am running this docker container on a Synology NAS and receive this error. I moved from a separate non Synology environment where it worked before, simply copied my folders and same compose block. I am primarily using this for Paperless document consuming, thus the paperless naming conventions. However the configuration should be isolated.

  paperless-webdav:
    image: dgraziotin/nginx-webdav-nononsense:latest
    container_name: paperless-webdav
    restart: unless-stopped
    networks:
      - apps-net
    environment:
      - PUID=${puid}
      - PGID=${pgid}
      - TZ=${tz}
      - WEBDAV_USERNAME=${paperless_webdav_user}
      - WEBDAV_PASSWORD=${paperless_webdav_password}
      - SERVER_NAMES=scans.*
      - TIMEOUTS_S=1200 # these are seconds
      - CLIENT_MAX_BODY_SIZE=2G # must end with M(egabytes) or G(igabytes)
    volumes:
      - ./paperless/webdav:/config
      - ./paperless/consume:/data

PUID and PGID are ones that I use for other containers on the NAS. I can see that the startup of the container will show the proper ID's

-------------------------------------
GID/UID
-------------------------------------
User uid:    1032
User gid:    65538
-------------------------------------

Here is the "consume" directory on the host, where data should be getting dropped.

$ ls -laF

drwxrwxr-x 5 captain docker 4096 Jan 18 21:40 ./
drwxrwxr-x 8 captain docker 4096 Feb  8 13:36 ../
drwxrwx--- 2 captain docker 4096 Feb  8 14:01 consume/
drwxrwx--- 3 captain docker 4096 Feb  8 13:22 webdav/

With user captain being the 1032 id used for the container

$ id captain
uid=1032(captain) gid=100(users) groups=100(users)

I am getting the same error when trying to write a file. I can connect, browse and delete files just cant write, tried through various methods like an app called Quickscan on iOS or just Finder connection on Mac

172.20.0.2 - paperless [08/Feb/2023:14:01:46 -0600] "PROPFIND /statement.pdf HTTP/1.1" 404 153 "-" "WebDAVFS/3.0.0 (03008000) Darwin/22.2.0 (arm64)"
172.20.0.2 - paperless [08/Feb/2023:14:01:46 -0600] "PROPFIND /statement.pdf HTTP/1.1" 404 153 "-" "WebDAVFS/3.0.0 (03008000) Darwin/22.2.0 (arm64)"
2023/02/08 14:01:46 [crit] 138#138: *84 open() "/var/cache/nginx/client_temp/0000000003" failed (13: Permission denied), client: 172.20.0.2, server: scans.*, request: "PUT /statement.pdf HTTP/1.1", host: "scans.mydomain.com"
172.20.0.2 - paperless [08/Feb/2023:14:01:46 -0600] "PUT /statement.pdf HTTP/1.1" 500 177 "-" "WebDAVFS/3.0.0 (03008000) Darwin/22.2.0 (arm64)"

For good measure, I set this up on a a raspberry pi and it failed for the same file. Note that this has no reverse proxy (above uses SWAG/nginx), was just accessing directly.

  webdav:
    image: dgraziotin/nginx-webdav-nononsense:latest
    container_name: webdav
    ports:
      - 9999:80
    environment:
      - PUID=1001
      - PGID=995
      - TZ=America/Chicago
      - WEBDAV_USERNAME=test
      - WEBDAV_PASSWORD=qwerty21
      #- SERVER_NAMES=test.*
      - TIMEOUTS_S=1200 # these are seconds
      - CLIENT_MAX_BODY_SIZE=2G # must end with M(egabytes) or G(igabytes)
    volumes:
      - ./test/webdav:/config
      - ./test/consume:/data

Error from Mac OSX finder.

10.0.10.81 - test [08/Feb/2023:14:24:28 -0600] "PROPFIND /statement.pdf HTTP/1.1" 404 153 "-" "WebDAVFS/3.0.0 (03008000) Darwin/22.2.0 (arm64)"
10.0.10.81 - test [08/Feb/2023:14:24:28 -0600] "PROPFIND /statement.pdf HTTP/1.1" 404 153 "-" "WebDAVFS/3.0.0 (03008000) Darwin/22.2.0 (arm64)"
2023/02/08 14:24:28 [crit] 138#138: *4 open() "/data/statement.pdf.0000000002" failed (13: Permission denied), client: 10.0.10.81, server: localhost, request: "PUT /statement.pdf HTTP/1.1", host: "10.0.10.17:9999"
10.0.10.81 - test [08/Feb/2023:14:24:28 -0600] "PUT /statement.pdf HTTP/1.1" 500 177 "-" "WebDAVFS/3.0.0 (03008000) Darwin/22.2.0 (arm64)"

Really curious what is going on and how it worked for me before but then broke when I moved to a different host.

Thanks.

Restore CORS

As of commit 0125aa2, I removed all CORS headers to reduce complexity while we debug issues with Windows.

I need to decide if to restore them, and how (see also keeweb/keeweb)

cant pull image?

Hi,

I keep getting:

Pulling nginxwebdav (dgraziotin/docker-nginx-webdav-nononsense:)... ERROR: The image for the service you're trying to recreate has been removed. If you continue, volume data could be lost. Consider backing up your data before continuing.

somethings wrong?

MacOS Finder can't connect to server

I've follow all of the instructions, and can access webdav via browser, but using Finder got a Popup of Problems in connection. I'm using nginx reverse proxy with ssl.
This is mi log for the Finder Connection:

172.20.0.7 - - [17/Sep/2021:20:08:21 -0500] "OPTIONS / HTTP/1.1" 204 0 "-" "WebDAVLib/1.3"
172.20.0.7 - - [17/Sep/2021:20:08:36 -0500] "OPTIONS / HTTP/1.1" 204 0 "-" "WebDAVLib/1.3"
172.20.0.7 - - [17/Sep/2021:20:08:36 -0500] "OPTIONS / HTTP/1.1" 204 0 "-" "WebDAVFS/3.0.0 (03008000) Darwin/21.1.0 (arm64)"

Any help is appreciated!
PD: Nice project!!! this is one of the best written docker projects until now!!! Congratulations!

Multi-arch support

Hi. Thanks for the effort.

Could you please consider adding multi-arch to your images? arm/v7 and arm64/v8 are welcome.

I'm running my containers on a raspberry pi and it takes quite a while to build nginx. I also can't use the local built image on my k3s cluster since I don't have a docker registry configured.

Expose activity log

Can you add the ability to see activity in the docker logs? Commands like "GET, HEAD, PROPFIND, PUT", etc. It would be useful to see what's going on.

Win7/Win srv 2012 webdav cleint

Windows not working.
I installed this package from dockerhub, set it up in accordance with the instructions, made https through the proxy manager. All the same errors, the network drive is not connected. In the browser pass authorization normally, the list of files shows.

Document how to enable read only mode

I wanted to run this in read only mode and it took me a while to figure out I just need to add the following to config/nginx/location.conf, this might be useful for other users.

      limit_except GET PROPFIND OPTIONS HEAD {
            deny all;
      }

Handle Microsoft expectation for a 404 with PROPFIND

This is part of #8.

Using the "Map Network Drive" feature.

When adding the WebDAV location (e.g., http://192.168.178.99:32080), Windows/Explorer would fail to connect and give an error.

At this point, a PROPFIND request is issued when setting up the connection.

The issue is that Microsoft as well as IIS, expects an HTTP 404 in the response headers, whereas RFC2518 recommends an HTTP 207 with the error descriptions in the response body (an XML file).

Somebody (Russian, use Google Translate) proposed as fix to create an ad-hoc response for Microsoft only that would return 404. Implementing this solution restores access to the WebDAV location.

PROPFIND requests work unauthenticated

An unauthenticated PROPFIND request to / succeeds, and some properties are returned:

HTTP/1.1 207 Multi-Status
Server: openresty
Date: Fri, 17 Dec 2021 12:47:39 GMT
Content-Type: text/xml; charset=utf-8
Content-Length: 424
Connection: close

<?xml version="1.0" encoding="utf-8" ?>
<D:multistatus xmlns:D="DAV:">
<D:response>
<D:href>/</D:href>
<D:propstat>
<D:prop>
<D:displayname>/</D:displayname>
<D:getlastmodified>Fri, 17 Dec 2021 12:40:27 GMT</D:getlastmodified>
<D:resourcetype><D:collection/></D:resourcetype>
<D:lockdiscovery/>
<D:supportedlock>
</D:supportedlock>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>

An unauthenticated PROPFIND request to a (guessed) existing file succeeds, and some properties are returned:

HTTP/1.1 207 Multi-Status
Server: openresty
Date: Fri, 17 Dec 2021 12:48:51 GMT
Content-Type: text/xml; charset=utf-8
Content-Length: 469
Connection: close

<?xml version="1.0" encoding="utf-8" ?>
<D:multistatus xmlns:D="DAV:">
<D:response>
<D:href>/hello.txt</D:href>
<D:propstat>
<D:prop>
<D:displayname>hello.txt</D:displayname>
<D:getcontentlength>8</D:getcontentlength>
<D:getlastmodified>Fri, 17 Dec 2021 12:47:59 GMT</D:getlastmodified>
<D:resourcetype></D:resourcetype>
<D:lockdiscovery/>
<D:supportedlock>
</D:supportedlock>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>

Add my build and publish system into the repository

To prevent screwups like in #94 / #95 where I forget that I have a build system that overwrites the Dockerfile, I should release my simple build and publish system into the repository.

Dockerfile.template and README should specify how to provide code changes that target Dockerfile.

Windows/Explorer can only see the root folder, no traverse is possible

This is part of #8.

After fixing #11, it is only possible to access the root folder of the WebDAV location and see a file listing. No other operation (traverse, access) is possible.

It is also not possible to access the mapped WebDAV location a second time, after adding it.

Accessing the same file is greeted with an HTTP 401 with Microsoft/Explorer:

Microsoft/Explorer:

nginxwebdav  | 172.21.0.1 - - [10/Dec/2021:14:45:33 +0100] "GET /ciao.txt HTTP/1.1" 401 179 "-" "Microsoft-WebDAV-MiniRedir/10.0.22000"

Whereas with macOS Finder:

nginxwebdav  | 172.21.0.1 - user [10/Dec/2021:14:47:10 +0100] "PROPFIND / HTTP/1.1" 207 1377 "-" "WebDAVFS/3.0.0 (03008000) Darwin/21.1.0 (x86_64)"
nginxwebdav  | 172.21.0.1 - user [10/Dec/2021:14:47:11 +0100] "PROPFIND /ciao.txt HTTP/1.1" 207 371 "-" "WebDAVFS/3.0.0 (03008000) Darwin/21.1.0 (x86_64)"
nginxwebdav  | 172.21.0.1 - user [10/Dec/2021:14:47:11 +0100] "PROPFIND / HTTP/1.1" 207 335 "-" "WebDAVFS/3.0.0 (03008000) Darwin/21.1.0 (x86_64)"
nginxwebdav  | 172.21.0.1 - user [10/Dec/2021:14:47:13 +0100] "LOCK /ciao.txt HTTP/1.1" 200 383 "-" "WebDAVFS/3.0.0 (03008000) Darwin/21.1.0 (x86_64)"
nginxwebdav  | 172.21.0.1 - user [10/Dec/2021:14:47:13 +0100] "GET /ciao.txt HTTP/1.1" 304 0 "-" "WebDAVFS/3.0.0 (03008000) Darwin/21.1.0 (x86_64)"
nginxwebdav  | 172.21.0.1 - user [10/Dec/2021:14:47:13 +0100] "UNLOCK /ciao.txt HTTP/1.1" 204 0 "-" "WebDAVFS/3.0.0 (03008000) Darwin/21.1.0 (x86_64)"

update to jammy

Hello,
@dgraziotin, I want to thank you for putting all this together and for the documentation.
I am looking to replace Nextcloud, which does a lot of things, but I only use two parts, remote file browsing and syncing files from phones.
Filebrower takes care of the remote file browsing.
Docker-nginx-webdav-nonosense seems to be perfect to handle the syncing of files from android phones using PhotoSync.
After deploying dnwn by cloning the git repository, I noticed it was using baseimage-ubuntu:focal instead of baseimage-ubuntu:jammy in the Dockerfile.
I changed the baseimage to jammy on lines 10 and 116 and now dnwn is using the jammy image base.
Mentioning it, as I got the message the focal image is not longer supported. (I was also having problems, and thought the update would help, the problems where not due to having the focal base.)
I do not know what/if problems changing the base image will cause. As dgraziotin has not updated the Dockerfile to jammy, then this is a use at your own risk, if anyone else follows this info.

ability to delete files

Hello, first of all thank you for making my life easier with this image, been using for about a year

I use this with NAS + infuse for apple tv

The only nitpick I have is ability to delete files from it. The app supports it but webdav doesn't, at least from what I see I can only add custom users

Maybe I am missing something or is there any easy workaround? Thank you!!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.