nginx 映射到一个位置内的不同位置

nginx 映射到一个位置内的不同位置

环境:

  • webdav 服务器在 localhost:10001 上运行
  • nginx 服务器在 80 端口上运行

目标:

  • nginx 需要有一个外部 /webdav 位置
  • GET 请求需要由 nginx autoindex 提供
  • 所有其他请求方法都需要代理到 localhost:10001 的 webdav 服务器
  • GET 和 PROPFIND 请求方法无需认证(基本认证),而其他所有请求方法都需要认证

这是我尝试过的一个例子,我认为它传达了我的意图但却无效(这里不允许使用 map 指令)。

    map webdav_location $request_method {
      GET @webdav-get;
      PROPFIND @webdav-list;
      default @webdav-auth;
    }

    location @webdav-get {
      autoindex on;
      alias /mnt/storage/;
    }

    location @webdav-list {
      proxy_pass http://localhost:10001;
    }

    location @webdav-auth {
      include conf.d/auth.conf;
      proxy_pass http://localhost:10001;
    }

    location /webdav {
      $webdav_location;
    }

我也尝试过使用 if 语句,但我读到应该避免在 nginx conf 中使用 if 语句。因此我尝试使用 map,因为我认为我的目的是基于 request_method 进行映射,但也许其他方法更适合实现我的目标?

感谢您的阅读

相关内容