首页 > 其他分享 >Caddy 入门实战(1)--简介及安装

Caddy 入门实战(1)--简介及安装

时间:2023-08-06 10:33:48浏览次数:40  
标签:入门 -- Caddy 配置 caddy 占位 API HOME

Caddy 是一款基于 Go 语言编写的强大且可扩展的平台,可以给你的站点、服务和应用程序提供服务。本文主要内容为 Caddy 的简介及安装,文中所使用到的软件版本:Caddy 2.6.4、CentOS 7.9.2009。

1、简介

大多数人将 Caddy 用作 Web 服务器或代理,但 Caddy 的本质是诸多服务器的服务器。在安装了必要的模块后,它就可以充当长时间运行的进程的角色!

基于 Caddy 的 API,它的配置能被动态修改,且能导出来。虽然不需要配置文件,但你仍然可以使用它们;大多数人还是最喜欢通过 Caddyfile 对 Caddy 进行配置。虽然通过配置适配器可以对 Caddy 使用多种的配置文件格式,但它的原生配置语言是 JSON。

Caddy 已经编译好了所有主流平台的版本,且没有运行时依赖项。

1.1、约定

Caddy 生态系统遵循一些约定,以使整个平台的事情保持一致和直观。

1.1.1、占位符

Caddy 的配置支持使用占位符 (变量)。使用占位符是一种将动态值注入静态配置的简单方法。
占位符的两边都用花括号括起来{ },里面包含变量名,例如:{foo.bar}。占位符大括号可以转义,如\{like so\}。变量名通常用点命名,以避免模块之间的冲突。
哪些占位符可用取决于上下文。并非所有占位符在配置的所有部分都可用。例如,HTTP 应用程序设置的占位符仅在与处理 HTTP 请求相关的配置区域中可用。

以下是一些常用占位符:

占位符描述
{env.*} 环境变量(例如{env.HOME}
{system.hostname} 系统的本地主机名
{system.slash} 系统的文件路径分隔符
{system.os} 系统的操作系统
{system.arch} 系统架构
{time.now} Go 时间结构的当前时间
{time.now.unix} 当前时间,以秒为单位的 unix 时间戳
{time.now.unix_ms} 当前时间,以毫秒为单位的 unix 时间戳
{time.now.common_log} 通用日志格式的当前时间
{time.now.year} YYYY 格式的当前年份

并非所有配置字段都支持占位符,但大多数都支持你期望的位置。

1.1.2、文件位置

A、数据目录

Caddy 将 TLS 证书和其他重要资产存储在数据目录中,该目录由配置的存储模块支持(默认:本地文件系统)。
如果设置了环境变量 XDG_DATA_HOME,则为 $XDG_DATA_HOME/caddy。
否则,它的路径因平台而异,遵守操作系统约定:

操作系统数据目录路径
Linux, BSD $HOME/.local/share/caddy
Windows %AppData%\Caddy
macOS $HOME/Library/Application Support/Caddy
Plan 9 $HOME/lib/caddy
Android $HOME/caddy(或/sdcard/caddy

所有其他操作系统都使用 Linux/BSD 目录路径。
数据目录不能被视为缓存。 它的内容不是短暂的,也不是仅仅为了表演。Caddy 将 TLS 证书、私钥、OCSP 订书钉和其他必要信息存储到数据目录中。在不了解其含义的情况下,不应将其清除。
至关重要的是,这个目录是持久的并且可由 Caddy 写入。

B、配置目录

这是 Caddy 可以将某些配置存储到磁盘的地方。最值得注意的是,它将最后一个活动配置(默认情况下)保存到此文件夹,以便以后使用caddy run --resume。
如果设置了环境变量 XDG_CONFIG_HOME,则为 $XDG_CONFIG_HOME/caddy。
否则,它的路径因平台而异,遵守操作系统约定:

操作系统配置目录路径
Linux, BSD $HOME/.config/caddy
Windows %AppData%\Caddy
macOS $HOME/Library/Application Support/Caddy
Plan 9 $HOME/lib/caddy

所有其他操作系统都使用 Linux/BSD 目录路径。
至关重要的是,这个目录是持久的并且可由 Caddy 写入。

1.1.3、持续时间

持续时间字符串通常在 Caddy 的配置中使用,有效单位是:

  • ns (纳秒)
  • us/µs (微秒)
  • ms (毫秒)
  • s (秒)
  • m (分)
  • h (小时)
  • d (天)

例子:

  • 250ms
  • 5s
  • 1.5h
  • 2h45m
  • 90d

1.2、JSON vs Caddyfile

可以使用 JSON 或 Caddyfile 来配置 Caddy,两种方法各有利弊。

JSONCaddyfile
通用的 只在Caddy使用
易于生成 易于手写
易于编程 难以实现自动化
caddy的所有功能 caddy大部分通用的功能
极富表现力 适度表现力
允许配置遍历 不能在Caddyfile内遍历
允许变更部分配置 只允许变更全部配置
可以被导出 不能被导出
支持所有API接口 只支持部分API接口
自动生成文档 文档支持手写
更高效 更易计算
有点无聊 更有意思

1.3、API vs 配置文件

可以通过 API 或配置文件的方式来配置 Caddy;在底层,配置文件也要经过 Caddy 的 API 接口,caddy 命令只是为你包装那些 API 调用。两种方法各有利弊:

API配置文件
通过HTTP请求更改配置 通过 shell 命令更改配置
易于扩展 难于扩展
很难手工操作 易于手工操作
很有趣 也很有趣

 API 或配置文件的选择与配置适配器的使用是可以交替进行的:你可以使用 JSON,但将其存储在文件中并使用命令行接口;相反,你也可以在 API 中使用 Caddyfile。但大多数人会使用 JSON + API 或  Caddyfile + CLI 组合。

2、安装

这里直接下载编译好的二进制文件,可以直接运行。下载地址:https://github.com/caddyserver/caddy/releases,根据平台下对应的文件,下载后解压:

tar zxvf caddy_2.6.4_linux_amd64.tar.gz

2.1、使用 API 配置 Caddy

先启动 Caddy:

./caddy run

编辑调用 API 使用的 JSON 文件(caddy.json):

{
    "apps": {
        "http": {
            "servers": {
                "example": {
                    "listen": [":8080"],
                    "routes": [
                        {
                            "handle": [{
                                "handler": "static_response",
                                "body": "Hello, world!"
                            }]
                        }
                    ]
                }
            }
        }
    }
}

在本机通过管理端口 2019 调用 API:

curl http://localhost:2019/load \
    -X POST \
    -H "Content-Type: application/json" \
    -d @caddy.json

访问配置的地址:

2.2、使用 API 配置 Caddy

在同目录下新建文件名称为 Caddyfile 的文件,如果配置文件不为该名称或在其他目录下,启动时需通过 --config(./caddy run --config string) 参数指定。Caddyfile 内容如下:

:8081
respond "Hello, world!"

启动:

./caddy run

访问配置的地址:

2.3、caddy 命令

使用命令 caddy -h 查看使用方法:

Usage:
  caddy [command]

Examples:
  $ caddy run
  $ caddy run --config caddy.json
  $ caddy reload --config caddy.json
  $ caddy stop

Available Commands:
  adapt          Adapts a configuration to Caddy's native JSON
  add-package    Adds Caddy packages (EXPERIMENTAL)
  build-info     Prints information about this build
  completion     Generate completion script
  environ        Prints the environment
  file-server    Spins up a production-ready file server
  fmt            Formats a Caddyfile
  hash-password  Hashes a password and writes base64
  help           Help about any command
  list-modules   Lists the installed Caddy modules
  manpage        Generates the manual pages for Caddy commands
  reload         Changes the config of the running Caddy instance
  remove-package Removes Caddy packages (EXPERIMENTAL)
  respond        Simple, hard-coded HTTP responses for development and testing
  reverse-proxy  A quick and production-ready reverse proxy
  run            Starts the Caddy process and blocks indefinitely
  start          Starts the Caddy process in the background and then returns
  stop           Gracefully stops a started Caddy process
  trust          Installs a CA certificate into local trust stores
  untrust        Untrusts a locally-trusted CA certificate
  upgrade        Upgrade Caddy (EXPERIMENTAL)
  validate       Tests whether a configuration file is valid
  version        Prints the version

Flags:
  -h, --help   help for caddy

Use "caddy [command] --help" for more information about a command.

2.3.1、启动

有两种启动方法:

caddy run #前台启动
caddy start #后台启动

2.3.2、停止

前台启动时使用 Ctrl+C 停止服务;后台启动时使用如下命令停止服务:

caddy stop

 

 

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

标签:入门,--,Caddy,配置,caddy,占位,API,HOME
From: https://www.cnblogs.com/wuyongyin/p/17504495.html

相关文章

  • 无涯教程-Perl - binmode函数
    描述此函数设置在区分两者的操作系统上以二进制形式读取和写入FILEHANDLE的格式。非二进制文件的CRLF序列在输入时转换为LF,在LF时在输出时转换为CRLF。这对于使用两个字符分隔文本文件中的行的操作系统(MS-DOS)至关重要,但对使用单个字符的操作系统(Unix,MacOS,QNX)没有影响......
  • Git实战指南:从入门到实战手把手教你玩转Git
    一、基本操作1.使用命令设置用户名:gitconfig--globaluser.name"你的用户名"2.使用命令设置邮箱:gitconfig--globaluser.email"你的邮箱"2-1.查看一下配置的【用户名】和【邮箱】,以防配置错误:3.使用命令生成SSHKey:ssh-keygen-trsa-C'你的邮箱'(这样代......
  • Java学习笔记(四)
    3.7for循环需求: 某些代码在满足某些条件时需要重复执行。解决: 循环Java中循环结构有三种:for、while、do...while3种循环结构的作用: 可以重复执行某些代码它们3者完全可以互换。一、for循环1、for循环是使用频率最高的一种。2、for循环的语法结构for(【循环变量初始化表......
  • 树的重心
    树的重心:找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡。使得以该节点为根的子树中,最大子树高度最小的节点 //会议//https://www.luogu.com.cn/problem/P1395//f数组:f数组用于记录以每个节点为根的子树中的......
  • openGauss学习笔记-32 openGauss 高级数据管理-批处理模式
    openGauss学习笔记-32openGauss高级数据管理-批处理模式openGauss支持从文本文件执行SQL语句。openGauss提供了gsql工具实现SQL语句的批量处理。以下场景建议使用批处理:如果您重复运行查询(例如,每天或每周),将其设为脚本可以让您避免每次进行重复输入。您可以通过复制和编辑脚......
  • 【230806-1】在三角形ABC中,角ABC的对边分别是abc,角C=120°,a=2b,则tanA=?
    ......
  • 论文解读:《基于提示学习的多层次蛋白质结构预训练》
    ICLR会议论文TItle:MULTI-LEVELPROTEINSTRUCTUREPRE-TRAININGWITHPROMPTLEARNING王泽源 1,2,7*张强 1,2*†余浩然2,3 胡双伟4     1 浙江大学计算机科学与技术学院2浙江大学-杭州全球科技创新中心3浙江大学化学与生物工程学院4Vecx生物医药股份有限公司,5敏......
  • QT QML 使用布局
    前言既然qml主要用于写前端界面,那么布局管理肯定是相当重要的部分。下面就介绍QML布局管理中的定位器(Positioners)和Layouts。定位器(Positioners)定位器是一个容器,可以管理其中子项目的布局。定位器包括RowColumnGridFlow。如果它们的子项目不可见,宽度或高度为0,那么该......
  • origin软件下载 origin2022最新中文版下载 官方版特色
    origin官方版是款由originlab公司为用户们打造的函数绘图制图工具。origin拥有强大的数据导入功能,支持多种格式的数据,包括ASCII、Excel、NITDM、DIADem、NetCDF、SPC等。origin既可以满足一般用户的映射需求,也可以满足高级用户数据分析和功能拟合的需求。软件地址:看置顶贴Origin软......
  • Origin下载 - Origin 2022 官方最新版下载 官方版特色
    功能介绍1、绘图该软件拥有超过100种内置和扩展的图形类型以及所有元素的点击式自定义,可以轻松创建和自定义出版质量的图形。您可以添加额外的轴和面板,添加、删除绘图等以满足您的需要。批量绘制具有相似数据结构的新图形,或将自定义图形保存为图形模板或将自定义元素保存为图形主......