首页 > 其他分享 >Caddy 入门实战(3)--Caddyfile 介绍

Caddy 入门实战(3)--Caddyfile 介绍

时间:2023-08-20 10:33:54浏览次数:70  
标签:tls http 请求 -- request Caddy Caddyfile com localhost

Caddyfile 是一种方便用户使用的 Caddy 配置格式。这是大多数人最喜欢使用 Caddy 的方式,因为它易于编写、易于理解,且能满足绝大部分的使用场景。本文主要介绍 Caddyfile 的相关概念。

1、Caddyfile 结构

  • 可选的全局选项块必须放在文件的头部
  • 否则, Caddyfile 的首行总是要提供服务的网站地址。
  • 所有指令和匹配器都必须放在站点块中。跨站点块没有全局范围或继承。
  • 如果只有一个站点块,则其花括号{ }是可选的。

一个 Caddyfile 至少包含一个或多个站点块,这些块总是以站点的一个或多个地址开始。出现在地址之前的任何指令都会使扰乱解析器。

1.1、块

块用花括号来表示:

... {
    ...
}
  • { 必须位于行尾
  • } 必须独占一行

当只有一个站点块时,花括号(和缩进)是可选的;这是为了方便快速定义单个站点,如:

localhost:8080
reverse_proxy /api/* localhost:9001

相当于:

localhost:8080 {
    reverse_proxy /api/* localhost:9001
}

如果一个请求匹配多个站点块,则选择具有最具体匹配地址的站点块。请求不会级联到其他站点块。

1.2、指令

指令是自定义网站服务方式的关键字。指令是站点块中一行的第一个单词。如下,reverse_proxy 为指令:

localhost:8080
reverse_proxy localhost:9000

 子指令可以出现在指令块中,如下,lb_policy 是 reverse_proxy 的子指令:

localhost:8080
reverse_proxy localhost:9000 localhost:9001 {
    lb_policy first
}

1.3、标记和引号

Caddyfile 在被解析之前会被词法解析成标记。空格在 Caddyfile 中很重要,因为标记就是由它进行分隔。通常,指令需要一定数量的参数,参数中如果有空格,需要使用引号引起来:

directive "abc def"

如果参数中包含引号,可以使用转义或反引号:

directive "\"abc def\""

directive `"foo bar"`

2、地址

地址总是出现在站点块的顶部,以下是有效地址的:

localhost
example.com
:443
http://example.com
localhost:8080
127.0.0.1
[::1]:2015
example.com/foo/*
*.example.com
http://

从地址中,Caddy 可以潜在地推断出你站点的方案、主机、端口和路径。
如果你指定主机名,则只会处理具有匹配 Host 标头的请求。换句话说,如果站点地址是 localhost,那么 Caddy 将不会匹配到 127.0.0.1 的请求。
可以使用通配符(*),但仅代表主机名的一个标签。例如,*.example.com 匹配 foo.example.com,但不匹配 foo.bar.example.com,* 匹配 localhost,但不匹配 example.com。
如果多个站点共享相同的定义,你可以将所有站点一起列出:

localhost:8080, example.com, www.example.com

或者

localhost:8080,
example.com,
www.example.com

逗号表示地址的延续。地址必须是唯一的;你不能多次指定同一个地址。

3、匹配器

默认情况下,注入 HTTP 处理程序的指令适用于所有请求。
请求匹配器可用于按给定标准对请求进行分类。使用匹配器,你可以准确指定某个指令适用于哪些请求。
对于支持匹配器的指令,指令后的第一个参数是匹配器标记。如:

root *           /var/www  # matcher token: *
root /index.html /var/www  # matcher token: /index.html
root @post       /var/www  # matcher token: @post

完全省略匹配器标记,则可以匹配所有的请求;例如,如果下一个参数看起来不像路径匹配器,则不需要给出 *。

4、占位符

可以在 Caddyfile 中使用 Caddy 占位符,占位符说明如下:

简写完整写法说明
{cookie.*} {http.request.cookie.*} 某个 cookie 信息
{dir} {http.request.uri.path.dir} 请求路径目录,对于请求/a/b/c.html,值为:/a/b
{err.*} {http.error.*}  
{file_match.*} {http.matchers.file.*}  
{file.base} {http.request.uri.path.file.base} 请求路径文件基础部分,对于请求/a/b/c.html,值为:c
{file.ext} {http.request.uri.path.file.ext} 请求路径文件后缀,对于请求/a/b/c.html,值为:.html
{file} {http.request.uri.path.file} 请求路径文件,对于请求/a/b/c.html,值为:c.html
{header.*} {http.request.header.*} 某个请求头信息,如:{header.User-Agent}
{host} {http.request.host} 请求主机
{labels.*} {http.request.host.labels.*}  
{hostport} {http.request.hostport} 请求主机及端口
{port} {http.request.port} 请求端口
{method} {http.request.method} 请求方法
{path} {http.request.uri.path} 请求路径
{path.*} {http.request.uri.path.*}  
{query} {http.request.uri.query} 请求参数
{query.*} {http.request.uri.query.*} 某个请求参数
{re.*.*} {http.regexp.*.*}  
{remote} {http.request.remote} 客户端地址
{remote_host} {http.request.remote.host} 客户端主机
{remote_port} {http.request.remote.port} 客户端端口
{scheme} {http.request.scheme} 请求协议
{tls_cipher} {http.request.tls.cipher_suite}  
{tls_version} {http.request.tls.version}  
{tls_client_fingerprint} {http.request.tls.client.fingerprint}  
{tls_client_issuer} {http.request.tls.client.issuer}  
{tls_client_serial} {http.request.tls.client.serial}  
{tls_client_subject} {http.request.tls.client.subject}  
{tls_client_certificate_pem} {http.request.tls.client.certificate_pem}  
{tls_client_certificate_der_base64} {http.request.tls.client.certificate_der_base64}  
{upstream_hostport} {http.reverse_proxy.upstream.hostport}  
{uri} {http.request.uri} 请求路径及请求参数
{vars.*} {http.vars.*}  

5、片段

你可以定义称为片段的特殊块,如:

(redirect) {
    @http {
        protocol http
    }
    redir @http https://{host}{uri}
}

然后你可以在任何你需要的地方重复使用它:

import redirect

import 指令还可用于在其位置包含其他文件。作为一种特殊情况,它几乎可以出现在 Caddyfile 中的任何位置。

可以将参数传递给导入的配置并像这样使用它们:

(snippet) {
  respond "Yahaha! You found {args.0}!"
}

a.example.com {
    import snippet "Example A"
}

b.example.com {
    import snippet "Example B"
}

6、注释

注释从行首的 # 开始并一直持续到行尾:

# Comments can start a line
directive  # or go at the end

# 不能出现在标记的中间(即它必须以空格开头或出现在行首)。这允许在 URI 或其他值中使用它而不需要引号。

7、环境变量

如果你的配置依赖于环境变量,你可以在 Caddyfile 中使用它们:

{$SITE_ADDRESS}

这种形式的环境变量在解析开始之前被替换,因此它们可以扩展为空值、部分标记、完整标记,甚至是多个标记和行。当未找到环境变量时,可以指定默认值,方法是使用:变量名和默认值之间的分隔符:

{$DOMAIN:localhost}

如果你想将环境变量的替换推迟到运行时,你可以使用标准 {env.*} 占位符。

8、全局选项

Caddyfile 是没有键的特殊块,称为全局选项块:

{
    ...
}

如果存在,它必须是配置中的第一个块。
它用于设置全局适用的选项;在里面,只能设置全局选项,不能使用常规站点指令。

 

 

参考:https://caddy2.dengxiaolong.com/docs/caddyfile

标签:tls,http,请求,--,request,Caddy,Caddyfile,com,localhost
From: https://www.cnblogs.com/wuyongyin/p/17532686.html

相关文章

  • Codeforces EduRound153 Editorial
    A如果有\(()\)那么肯定是不合法的有两种很简单的构造,()()()()...()和((((...)))),如果一个串是第一种构造的子串那么一定不是第二种构造的子串,反之亦然。使用python取之B把\(m\%k\)的余数补齐,再把多出来的\(1\)价格regularcoins\(m\)个一组f使用python取之C......
  • 课程研发降本增效
      课程标准化。制定课程开发规范,统一项目建设方式、交付标准等。模块化开发。把课程内容抽取成可复用的模块,便于组合开发新课程。课件自动创建。利用模板与数据驱动自动生成课件资源,降低重复工作。视频智能采编。利用AI打码、编辑成果共享提高视频制作效率。......
  • 2-17-Gateway网关-过滤器链执行顺序
    自定义过滤器可以通过设置order注解来随意放置执行顺序配置过滤器则会在全局与单服务之间来回跳(因为两个都是从1开始计数,也可以自定义指定order属性)每一个过滤器都必须指定一个int类型的order值,order值越小,优先级越高,执行顺序越靠前。GlobalFilter通过实现Ordered接口,或者添......
  • .计算行数据和,每行数据总数未知,总行数未知且任意结尾
    7.计算行数据和,每行数据总数未知,总行数未知且任意结尾链接:https://ac.nowcoder.com/acm/contest/5657/G来源:牛客网题目描述:计算一系列数的和输入描述:输入数据有多组,每行表示一组输入数据。每行不定有nnn个整数,空格隔开。(1≤n≤100)(1\len\le100)(1≤n≤100......
  • EndNote下载_EndNote官方版下载 系列软件
    EndNote免费版是一款功能非常强大的文献管理软件,EndNote免费版为用户提供了极为强大的文献管理功能,能够帮助用户将自己的文献保存到云库中,方便各种各样的文献更好的进行流通分享,简单的下载即可进行使用,感兴趣的用户快来下载体验吧。软件地址:看置顶贴endnoteX7安装教程1、首先需要......
  • PhotoShop 2023下载-功能强大的图片编辑软件 系列软件
    AdobePhotoshop,简称“PS”,是一个由Adobe公司开发和发行的图像处理软件。它可以编辑和合成多个图层中的位图,支持图层遮罩、图像合成。除了位图之外,它还具有编辑或渲染文本、矢量图形、3D图形和视频,并且PS还支持外部插件来拓展其功能。其中,PhotoshopCC2019于2018年10月15日发布。......
  • Adobe Photoshop官方软件Photoshop 2022正式版下载 系列软件
    Photoshop2022v23.0.2.101是由Adobe公司最新推出的高效、专业、实用的图像处理软件,同时该软件主要是以其强悍的编辑和调整、绘图等功能得到广泛的应用,其中还有各种图片的调整和图画绘制以及图像的修复、调色等一系列的工具都是数不胜数,使用范围也是非常的广,我们从照片修饰到海报......
  • 「PR安装教程」2023最新版!PR下载安装免费教程 系列软件
    AdobePremiereProCC中文精简版是一款适用于专业视频制作与编辑的工具软件,AdobePremiereProCC强大、可自定义、非线性的编辑器,可让您随心所欲地精准编辑视频。PremiereCC提供了几种新功能和增强功能,可充实您的数字视频剪辑体验。软件地址:看置顶贴pr2021新功能1、ARRIProRe......
  • Pr-官版下载-Premiere-2023正版-永久使用 系列软件
    软件特色1、导入任何文件格式的镜头。轻松拖放视频文件至您的项目。无论您是用DSLR、GoPro还是iPhone—或其它智能手机—进行摄像,都可以使用PremierePro视频编辑软件制作。2、精确修剪镜头。使用修剪工具在时间线上进行直观编辑,延长或缩短电影剪辑。凭借PremierePro的直观编辑流......
  • IDEA配置SVN
    1配置svn.exe路径2启用版本控制VCS–enableversioncontrolintegration3设置VersionControl---Settings–VersionControl4在工程上右键可以看到--此时项目已经变更颜色了.5提交maven工程到svn仓库首先工程右键—subversion–shareDirectory,先将工程share到svn服务器,......