前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Caddy:安装、使用和配置指南

Caddy:安装、使用和配置指南

原创
作者头像
TechHarmony
发布2024-04-12 22:57:44
4390
发布2024-04-12 22:57:44
举报
文章被收录于专栏:智汇编程工坊智汇编程工坊

今天我们要聊聊的是一个非常酷的开源 HTTP/2 web 服务器——Caddy。Caddy 是用 Go 语言编写的,它的配置文件简洁明了,功能强大,使得 HTTP 服务的部署变得更加简单。Caddy 的最大特点是默认启用 HTTPS。在这篇文章中,我将向你介绍如何安装和使用 Caddy,以及如何通过 Caddyfile 和 API 来配置 Caddy。

Caddy 简介

Caddy 是一个开源的、使用 Go 编程语言构建的 HTTP/2 web 服务器,它的主要特性包括自动 HTTPS、HTTP/2、IPv6、Markdown、WebSockets、FastCGI、模板等。Caddy 的发展历史可以追溯到 2015 年,由 Matt Holt 在他的硕士论文中首次提出。他的目标是创建一个可以自动获取和更新 TLS 证书的 web 服务器,以便更容易地部署安全的网站。这个想法得到了广泛的认可,Caddy 很快就吸引了大量的开发者和用户。

Caddy 安装

二进制文件安装

  1. 首先,我们需要下载 Caddy 的二进制文件,你可以在这里下载:https://caddyserver.com/download
  2. 下载完成后,我们需要运行以下命令:
代码语言:sh
复制
sudo mv caddy /usr/bin/
sudo mkdir /etc/caddy
sudo cp Caddyfile /etc/caddy/Caddyfile
sudo groupadd --system caddy
sudo useradd --system \
    --gid caddy \
    --create-home \
    --home-dir /var/lib/caddy \
    --shell /usr/sbin/nologin \
    --comment "Caddy web server" \
    caddy
  1. 接下来,我们需要将以下内容写入 /etc/systemd/system/caddy.service 文件:
代码语言:plain
复制
[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target

[Service]
Type=notify
User=caddy
Group=caddy
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile --force
TimeoutStopSec=5s
LimitNOFILE=1048576
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target
  1. 最后,我们启动 Caddy:
代码语言:sh
复制
sudo systemctl daemon-reload
sudo systemctl enable --now caddy
sudo systemctl status caddy

注意:如果你使用的是 CentOS 7,由于其 systemd 版本过低(219),需要先进行升级。

代码语言:sh
复制
wget https://copr.fedorainfracloud.org/coprs/jsynacek/systemd-backports-for-centos-7/repo/epel-7/jsynacek-systemd-backports-for-centos-7-epel-7.repo -O /etc/yum.repos.d/jsynacek-systemd-centos-7.repo
sudo yum update systemd -y

Docker 安装

如果你更喜欢使用 Docker,你可以在 Docker Hub 上找到 Caddy 的官方镜像:https://hub.docker.com/_/caddy

你可以使用以下命令来运行一个 Caddy 容器:

代码语言:sh
复制
docker run -d --name caddy \
  -p 80:80 \
  -v $PWD/Caddyfile:/etc/caddy/Caddyfile \
  -v caddy_data:/data \
  caddy

Caddy 使用

Caddy 的使用非常简单,你只需要运行以下命令:

代码语言:sh
复制
caddy run

你也可以指定一个 Caddyfile:

代码语言:sh
复制
caddy run --config /path/to/Caddyfile

如果你需要启动一个静态文件服务器,你可以使用以下命令:

代码语言:sh
复制
caddy file-server --listen :2015 --root ~/mysite

如果你需要启动一个文件浏览器,你可以使用以下命令:

代码语言:sh
复制
caddy file-server --browse

如果你需要启动一个反向代理,你可以使用以下命令:

代码语言:sh
复制
caddy reverse-proxy --from :2080 --to :9000

如果你需要格式化你的 Caddyfile,你可以使用以下命令:

代码语言:sh
复制
caddy fmt --overwrite

Caddy API

Caddy 提供了一个 API 接口,你可以通过这个接口来查看和修改 Caddy 的配置。例如,你可以使用以下命令来查看当前的配置:

代码语言:sh
复制
curl localhost:2019/config/

你也可以添加一个新的 JSON 配置:

代码语言:sh
复制
curl localhost:2019/load \
  -H "Content-Type: application/json" \
  -d @caddy.json

或者更新一个现有的 Caddyfile:

代码语言:sh
复制
curl localhost:2019/load \
	-H "Content-Type: text/caddyfile" \
	--data-binary @Caddyfile

Caddyfile

Caddyfile 是 Caddy 的配置文件,它使用简单的语法来定义和配置 Caddy 的行为。以下是一些基本的 Caddyfile 配置:

  • 简单响应:
代码语言:plain
复制
:2015

respond "Hello, world!"
  • 文件服务器:
代码语言:plain
复制
localhost

root * /var/www/mysite
file_server
  • 文件浏览器:
代码语言:plain
复制
localhost

root * /var/www/mysite
file_server browse
  • 反向代理:
代码语言:plain
复制
:2080

reverse_proxy :9000
  • 自动 HTTPS:
代码语言:plain
复制
your_domain.com:8443

reverse_proxy :9000
  • 使用 IP 的 HTTPS:
代码语言:plain
复制
your_ip:8443

reverse_proxy :9000
  • 禁用 HTTP 到 HTTPS 的重定向:
代码语言:plain
复制
{
    auto_https disable_redirects
}

your_domain.com:8443

reverse_proxy :9000
  • 多站点:
代码语言:plain
复制
localhost:2015 {
	respond "Hello, world!"
}

localhost:2016 {
	respond "Goodbye, world!"
}
  • 匹配器令牌:只代理子路径:
代码语言:plain
复制
localhost

reverse_proxy /api/* 127.0.0.1:9005
  • 处理路径:
代码语言:plain
复制
example.com {
	handle_path /foo/* {
		# The path has the "/foo" prefix stripped
	}

	handle /bar/* {
		# The path still retains "/bar"
	}
}

示例

下面是一个使用 Caddy 的子路径代理功能来代理 n8n 服务的示例。首先,我们需要在 n8n 中添加 N8N_PATH 环境变量:

代码语言:sh
复制
docker run -d \
  --name n8n \
  -p 5678:5678 \
  -v n8n_data:/home/node/.n8n \
  -e TZ="Asia/Shanghai" \
  -e N8N_PATH=/n8n/ \
  -e N8N_SECURE_COOKIE=false \
  docker.n8n.io/n8nio/n8n

然后,我们可以在 Caddy 中通过 handle_path 指令处理子路径请求并改写路径:

代码语言:plain
复制
{
   auto_https disable_redirects
}

9.135.143.173:8443 {
    handle_path /n8n/* {
        reverse_proxy localhost:5678
    }
    handle {
        reverse_proxy localhost:8080
    }
}

这样,所有发送到 /n8n/* 的请求都会被代理到 localhost:5678,其他的请求则会被代理到 localhost:8080

总结

以上就是我对 Caddy 的介绍,包括它的安装、使用、API 和 Caddyfile。我希望这篇文章能帮助你更好地理解和使用 Caddy。如果你有任何问题或者建议,欢迎在评论区留言

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Caddy 简介
  • Caddy 安装
    • 二进制文件安装
      • Docker 安装
      • Caddy 使用
      • Caddy API
      • Caddyfile
      • 示例
      • 总结
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档