Caddy 反向代理下返回指定 txt 文件的三种方法

需求场景

Caddy 作为反向代理时,需要让 域名/xxx.txt 直接返回指定内容,而不走反向代理后端。

方法一:respond 直接返回

不读取磁盘文件,直接在配置中硬编码返回内容。

example.com {
    handle /WW_verify_hwnh.txt {
        respond "hzkAVVwnh" 200
    }
    handle {
        reverse_proxy localhost:8080
    }
}

适用场景:验证文件内容固定、极少变动,无需磁盘文件。

注意点:

  • 匹配优先级:需放在 reverse_proxy 之前,或用 handle 包裹。
  • Content-Type:默认可能为 text/plain; charset=utf-8,如需严格指定:

    respond "hzkAVVwnh" 200 {
        header Content-Type "text/plain"
    }
  • 换行符:respond 的 body 写什么返回什么,不会自动加换行,比磁盘文件更可控。
  • 多个验证文件:写多条 respond,或用 @matcher 配合 handle 批量处理。

方法二:handle + file_server

拦截特定路径,交给静态文件服务,其余请求走反向代理。

example.com {
    handle /归属.txt {
        root * /path/to/your/txt/files
        file_server
    }
    handle {
        reverse_proxy localhost:8080
    }
}

适用场景:文件真实存在于磁盘,需统一管理。

方法三:try_files + file_server

先检查本地磁盘是否存在该文件,存在则直接返回,不存在则转发给后端。

example.com {
    root * /path/to/your/files

    @has_file {
        file {path}
    }
    file_server @has_file

    reverse_proxy localhost:8080
}

适用场景:本地存有大量静态文件,希望 Caddy 自动优先服务。

三种方法对比

方法原理适用场景是否需要磁盘文件
respond配置中硬编码返回内容验证文件内容固定、极少变动否
handle + file_server拦截特定路径,交给静态文件服务文件真实存在于磁盘,需统一管理是
try_files + file_server先找文件,找到返回,找不到才反代本地有大量静态文件,希望自动优先是

结论

  • 域名归属验证类需求(内容固定、路径固定、只返回一小段字符串),优先使用 respond,最轻量、最不易出错。
  • 需要真实文件且希望统一管理,使用 handle + file_server。
  • 本地有大量静态文件且希望自动优先服务,使用 try_files + file_server。

标签: none

添加新评论