NGINX代理管理器后PhotoPrism的WebDAV配置问题(Docker部署)
在NGINX Proxy Manager后配置PhotoPrism WebDAV遇"Method Not Allowed"错误
部署环境
- PhotoPrism以Docker容器运行,通过子域名
photos.mydomain.com访问 - NGINX Proxy Manager同样为Docker容器,负责SSL/TLS证书管理与代理
- 两者均部署在IP为
XX.XX.XX.XX的根服务器上
PhotoPrism端口为2342,NGINX使用80和443端口。目标是通过WebDAV将QNAP NAS的照片同步到PhotoPrism,但持续收到**"Method Not Allowed"**错误。
配置文件
NGINX Proxy Manager Docker栈配置
version: '3.8' services: app: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: - '80:80' - '443:443' - '81:81' volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt
PhotoPrism Docker栈配置
version: '3.5' services: photoprism: image: photoprism/photoprism:latest stop_grace_period: 10s depends_on: - mariadb security_opt: - seccomp:unconfined - apparmor:unconfined ports: - "2342:2342" environment: PHOTOPRISM_HTTP_PORT: 2342 PHOTOPRISM_DATABASE_DRIVER: "mysql" PHOTOPRISM_DATABASE_SERVER: "mariadb:3306" PHOTOPRISM_DATABASE_NAME: "[Photoprism Databasename]" PHOTOPRISM_DATABASE_USER: "[Photoprism DB-User]" PHOTOPRISM_DATABASE_PASSWORD: "[Photoprism Database Password]" PHOTOPRISM_ADMIN_PASSWORD: "[Photoprism Admin Password]" PHOTOPRISM_PUBLIC: "false" PHOTOPRISM_READONLY: "true" volumes: - photoprism_originals:/photoprism/originals - photoprism_storage:/photoprism/storage mariadb: image: mariadb:10.11 restart: unless-stopped stop_grace_period: 5s security_opt: - seccomp:unconfined - apparmor:unconfined command: "[MariaDB Configuration Commands]" volumes: - mariadb_data:/var/lib/mysql environment: MARIADB_DATABASE: "photoprism" MARIADB_USER: "photoprism" MARIADB_PASSWORD: "[MariaDB User Password]" MARIADB_ROOT_PASSWORD: "[MariaDB Root Password]" volumes: mariadb_data: photoprism_originals: photoprism_storage:
NGINX Proxy Manager高级配置
location / { proxy_set_header Host $host; 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_pass http://[IP-of-PhotoPrism-Container]:2342; proxy_read_timeout 90; }
问题
- NGINX Proxy Manager是否需要针对WebDAV进行特定配置?
- 问题是否出在PhotoPrism的配置中?如果是,应如何调整?
- 有没有用户遇到过类似问题并能提供相关见解?
解决方案
1. NGINX Proxy Manager的WebDAV特定配置
需要。WebDAV依赖PUT、DELETE、PROPFIND等非标准HTTP方法,默认NGINX配置可能拦截这些请求,需在高级配置中添加支持:
location / { proxy_set_header Host $host; 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_pass http://[IP-of-PhotoPrism-Container]:2342; proxy_read_timeout 90; # 支持WebDAV所需的HTTP方法与请求头 proxy_set_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK"; proxy_set_header Access-Control-Allow-Headers "Authorization, Content-Type, Depth, If-Modified-Since, Destination, Overwrite, User-Agent, X-File-Size, X-Requested-With, X-File-Name"; # 直接返回OPTIONS请求的204响应 if ($request_method = OPTIONS) { return 204; } }
如果两个Docker服务在同一网络,建议用容器名代替IP(如http://photoprism:2342),避免IP变动导致的通信问题。
2. PhotoPrism的配置调整
问题出在PHOTOPRISM_READONLY: "true",该参数会禁用所有写入操作,而WebDAV同步需要向originals目录写入文件,必须将其改为:
PHOTOPRISM_READONLY: "false"
可额外添加PHOTOPRISM_WEBDAV_ENABLED: "true"显式开启WebDAV功能(默认已开启,此配置为冗余但可确保生效)。
3. 类似问题的经验总结
多数用户遇到的同类问题原因集中在:
- 只读模式限制写入,这是最常见的触发点
- NGINX未转发WebDAV所需的HTTP方法和请求头
- Docker网络隔离导致容器间无法通信,用容器名代替IP可解决
- 权限问题:确保PhotoPrism容器对
photoprism_originals卷有写入权限,可添加user: "1000:1000"(根据宿主UID/GID调整)到PhotoPrism服务配置中
内容的提问来源于stack exchange,提问作者DZane
相关产品推荐
相关产品推荐

