You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
}

问题

  1. NGINX Proxy Manager是否需要针对WebDAV进行特定配置?
  2. 问题是否出在PhotoPrism的配置中?如果是,应如何调整?
  3. 有没有用户遇到过类似问题并能提供相关见解?

解决方案

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 07:44:59