Caddy2匹配器(Request Matchers)使用

目录

Caddy2使用Request matchers过滤请求、设置权限的一些例子

Request Matchers

Request Matchers可以对请求头、请求路径、请求方法等进行匹配,从而进行限制访问、重定向、等操作。

例如针对不同的UA跳转到不同页面、针对某一路径的访问进行反代、WebDAV只读访问(限制请求方式)。

一些简单的例子

WebDav只读

切换至Caddy2 这篇提到过选装caddy-webdav插件来做WebDAV服务器,默认情况下,WebDAV的用户权限跟着caddy运行的用户走,没有办法单独设置,而通过Request Matchers可以做到这点。

@forbidWrite {}来命名Matcher,not method对除GETHEADOPTIONSPROPFIND这些请求方式以外的进行匹配。 route @forbidWrite {}对匹配到的请求返回403.

example.com {
  @forbidWrite {
    not method GET HEAD OPTIONS PROPFIND
  }
  route @forbidWrite {
    respond "Not allowed" 403
  }

  route {
    basicauth /* {
      user xxxxxxxxxxxxxxxxxxxxxx
    }
    webdav /* {
        root /media
    }
  }
}

UA屏蔽并重定向

UserAgent包含Firefox反代到本地的页面,不包含则重定向到Github。

example.com {
  @firefox header user-agent *Firefox*

  reverse_proxy @firefox http://127.0.0.1:1234

  @notFirefox not {
     header user-agent *Firefox*
  }
  redir @notFirefox https://github.com
}

匹配路径

一般使用 * 进行全部匹配.

example.com {
  reverse_proxy * http://127.0.0.1:1234
}

子路径匹配。

example.com {
  reverse_proxy /api/* http://127.0.0.1:1234
}

参考

  1. Request Matchers
  2. mholt/caddy-webdav/issues/27