#pingora #static #http #static-file

resource-proxy-pingora

用于提供静态文件的Pingora模块

2个版本

新版本 0.1.1 2024年8月20日
0.1.0 2024年8月20日

#1408 in HTTP服务器

Apache-2.0

140KB
2.5K SLoC

此模块是从Pandora Web Server分叉而来的。

从原始模块中清理并删除了一些内容

Pandora Web Server的静态文件模块

静态文件模块允许从目录中提供静态文件。

支持的功能

  • GETHEAD请求
  • 可配置目录索引文件
  • 可以配置页面在404 Not Found错误上显示,而不是标准错误页面。
  • 通过If-Modified-SinceIf-Unmodified-SinceIf-MatchIf-None匹配HTTP头部进行条件请求
  • 通过RangeIf-RangeHTTP头部进行字节范围请求
  • 提供文件的前压缩版本(支持gzip、zlib deflate、compress、Brotli、Zstandard算法)

已知限制

  • 不支持多个字节范围的请求,这将导致返回整个文件。实现此功能所需复杂性不值得这种罕见的用例。
  • 目前无法在Pingora框架内支持零拷贝数据传输(即sendfile)。

压缩支持

您可以通过precompressed配置设置激活对所选压缩算法的支持,例如使用此配置

root: /var/www/html
precompressed:
- gz
- br

使用此配置,对/file.txt的请求可能会返回/file.txt.gz/file.txt.br文件,如果目录中存在且客户端支持。如果存在多个支持的预压缩文件,则会根据客户端在Accept-Encoding HTTP头部中传达的首选项选择一个。

如果禁用了预压缩文件或未找到支持的变体,响应可能仍然会进行动态压缩。可以使用压缩模块激活动态压缩。

配置设置

配置设置 命令行 类型 默认值 描述
根目录 --root 目录路径 从该目录提供静态文件的目录
canonicalize_uri --canonicalize-uri 布尔值 如果设置为 true,则对 /file%2etxt 的请求将被重定向到 /file.txt,而对 /dir 的请求将被重定向到 /dir/
index_file --index-file 字符串列表 [] 当请求目录时,在这些文件中查找目录,如果找到则显示第一个,而不是通常的 403 禁止 错误
page_404 --page-404 URI 如果设置,则显示此页面而不是标准的 404 未找到 错误
precompressed --precompressed 文件扩展名列表 [] 要查找的预压缩文件的文件扩展名。支持的扩展名有 gz (gzip),zz (zlib deflate),z (compress),br (Brotli),zst (Zstandard)。
declare_charset --declare-charset 字符集 "utf-8" 为文本文件声明 字符集
declare_charset_types --declare_charset_types MIME 类型列表 ["text/*", "*+xml", "*+json", "application/javascript", "application/json", "application/json5"] 应应用 declare_charset 设置的 MIME 类型

指定 MIME 类型

declare_charset_types 设置是一个 MIME 类型的列表。每个条目应指定为以下格式之一

  • *:适用于任何 MIME 类型。
  • text/*:类型匹配,适用于类型部分为 text 的任何 MIME 类型。这比前缀匹配更有效。
  • image/svg*:前缀匹配,适用于以 image/svg 开头的任何 MIME 类型。
  • *+xml:后缀匹配,适用于以 +xml 结尾的任何 MIME 类型。
  • application/javascript:精确匹配,仅适用于 application/javascript MIME 类型。

依赖关系

~37–53MB
~1M SLoC