v2中文文档
项目

file_server

一个静态文件服务器,支持真实和虚拟文件系统。它通过将请求的URI路径附加到站点的根路径来形成文件路径。

默认情况下,它执行规范的URI;这意味着HTTP重定向将被用于对不以尾部斜线结尾的目录的请求(添加它)或对有尾部斜线的文件的请求(删除它)。然而,如果内部重写修改了路径的最后一个元素(文件名),则不会发出重定向。

最常见的是,file_server指令与root指令配对,为整个网站设置文件根。一个站点的根并不带有沙盒保证:文件服务器确实可以防止目录遍历,但是根中的符号链接仍然可以允许根之外的访问。

语法

file_server [<matcher>] [browse] {
	fs            <backend...>
	root          <path>
	hide          <files...>
	index         <filenames...>
	browse        [<template_file>]
	precompressed <formats...>
	status        <status>
	disable_canonical_uris
	pass_thru
}
  • browse 对没有索引文件的目录的请求,启用文件列表。

  • fs指定了一个备用的(也许是虚拟的)文件系统来使用。caddy.fs命名空间中的任何Caddy模块都可以在这里使用,只要它支持Stat()调用。任何根path/prefix仍将适用于替代的文件系统模块。默认情况下,使用本地磁盘。

  • root设置网站根目录。它类似于root指令,只是它只适用于这个文件服务器实例,并优先于任何可能已经定义的其他站点根目录。默认:{http.vars.root}或当前工作目录。注意:这个子指令只改变这个指令的根。其他指令(如try_filestemplates)要指定根目录,请使用root指令而不是这个子指令。

  • hide是一个要隐藏的文件或文件夹的列表;如果要求,文件服务器将假装它们不存在。该指令接受占位符和glob模式。注意,这些是 文件系统 路径,不是请求路径。换句话说,相对路径使用当前工作目录作为基础,而不是网站根目录;所有的路径在比较之前都会被转换为绝对形式(如果可能的话)。指定一个没有路径分隔符的文件名或模式,将隐藏所有具有匹配名称的文件,无论其位置如何;否则,将试图进行路径前缀匹配,然后再进行全局匹配。由于这是一个Caddyfile配置,默认情况下,活动的配置文件将被添加。

  • index是一个寻找索引文件的文件名列表。默认:index.html index.txt

  • **<template_file>**是一个可选的自定义模板文件,用于目录列表。默认为可以找到的模板[在源代码这里!外部链接](https://github.com/caddyserver/caddy/blob/master/modules/caddyhttp/fileserver/browse.html)。浏览模板也可以使用标准模板模块中的动作。

  • precompressed是用于搜索预压缩挎包文件的编码格式列表。参数是一个有序的编码格式列表,用于搜索预压缩的[sidecar文件](https://en.wikipedia.org/wiki/Sidecar_file)。支持的格式有gzip.gz),zstd.zst)和br.br)。

    所有的文件查找将首先寻找未压缩文件的存在。一旦找到,Caddy将寻找具有每种启用格式的文件扩展名的sidecar文件。如果找到一个预压缩的sidecar文件,Caddy会用预压缩的文件来回应,并适当地设置Content-Encoding响应头。否则,Caddy将以正常的未压缩文件进行响应。如果encode指令被启用,那么如果没有预压缩,它可能会对响应进行即时压缩。

  • status是一个可选的状态代码覆盖,在编写响应时使用。在用自定义错误页面响应请求时特别有用。可以是一个3位数的状态代码,例如:404。支持占位符。默认情况下,写入的状态代码通常是200,或206,用于部分内容。

  • disable_canonical_uris 如果请求路径是一个目录,则禁用重定向的默认行为,即添加尾部斜线,如果请求路径是一个文件,则删除尾部斜线。请注意,默认情况下,如果请求路径的最后一个元素(文件名)经历了内部重写,那么规范化将不会发生,以避免用隐性行为破坏显式重写。

  • pass_thru 启用pass-thru模式,如果没有找到请求的文件,则继续到路由中的下一个HTTP处理程序,而不是返回404。实际上,这可能只在route块中有用,因为file_server指令实际上是最后排序,否则的话。

示例

当前目录外的静态文件服务器。

file_server

启用了文件列表:

file_server browse

只服务于/static文件夹中的静态文件:

file_server /static/*

file_server指令通常与root指令配对,以设置提供文件的根路径。

root * /home/user/public_html
file_server

隐藏所有.git文件夹及其内容。

file_server {
	hide .git
}

如果客户端支持(Accept-Encoding'头),则检查请求的文件是否存在预压缩的文件。因此,如果/path/to/file被请求,它将依次检查/path/to/file.zst/path/to/file.br/path/to/file.gz`,并提供第一个具有相应内容编码的可用文件。

file_server {
	precompressed zstd br gzip
}