Caddy:安装、使用和配置指南原创
今天我们要聊聊的是一个非常酷的开源 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 安装
二进制文件安装
- 首先,我们需要下载 Caddy 的二进制文件,你可以在这里下载:https://caddyserver.com/download
- 下载完成后,我们需要运行以下命令:
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
- 接下来,我们需要将以下内容写入
/etc/systemd/system/caddy.service
文件:
[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
- 最后,我们启动 Caddy:
sudo systemctl daemon-reload sudo systemctl enable --now caddy sudo systemctl status caddy
注意:如果你使用的是 CentOS 7,由于其 systemd 版本过低(219),需要先进行升级。
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 容器:
docker run -d --name caddy \ -p 80:80 \ -v $PWD/Caddyfile:/etc/caddy/Caddyfile \ -v caddy_data:/data \ caddy
Caddy 使用
Caddy 的使用非常简单,你只需要运行以下命令:
caddy run
你也可以指定一个 Caddyfile:
caddy run --config /path/to/Caddyfile
如果你需要启动一个静态文件服务器,你可以使用以下命令:
caddy file-server --listen :2015 --root ~/mysite
如果你需要启动一个文件浏览器,你可以使用以下命令:
caddy file-server --browse
如果你需要启动一个反向代理,你可以使用以下命令:
caddy reverse-proxy --from :2080 --to :9000
如果你需要格式化你的 Caddyfile,你可以使用以下命令:
caddy fmt --overwrite
Caddy API
Caddy 提供了一个 API 接口,你可以通过这个接口来查看和修改 Caddy 的配置。例如,你可以使用以下命令来查看当前的配置:
curl localhost:2019/config/
你也可以添加一个新的 JSON 配置:
curl localhost:2019/load \ -H "Content-Type: application/json" \ -d @caddy.json
或者更新一个现有的 Caddyfile:
curl localhost:2019/load \ -H "Content-Type: text/caddyfile" \ --data-binary @Caddyfile
Caddyfile
Caddyfile 是 Caddy 的配置文件,它使用简单的语法来定义和配置 Caddy 的行为。以下是一些基本的 Caddyfile 配置:
- 简单响应:
:2015 respond "Hello, world!"
- 文件服务器:
localhost root * /var/www/mysite file_server
- 文件浏览器:
localhost root * /var/www/mysite file_server browse
- 反向代理:
:2080 reverse_proxy :9000
- 自动 HTTPS:
your_domain.com:8443 reverse_proxy :9000
- 使用 IP 的 HTTPS:
your_ip:8443 reverse_proxy :9000
- 禁用 HTTP 到 HTTPS 的重定向:
{ auto_https disable_redirects } your_domain.com:8443 reverse_proxy :9000
- 多站点:
localhost:2015 { respond "Hello, world!" } localhost:2016 { respond "Goodbye, world!" }
- 匹配器令牌:只代理子路径:
localhost reverse_proxy /api/* 127.0.0.1:9005
- 处理路径:
example.com { handle_path /foo/* { # The path has the "/foo" prefix stripped } handle /bar/* { # The path still retains "/bar" } }
示例
下面是一个使用 Caddy 的子路径代理功能来代理 n8n 服务的示例。首先,我们需要在 n8n 中添加 N8N_PATH
环境变量:
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
指令处理子路径请求并改写路径:
{ 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。如果你有任何问题或者建议,欢迎在评论区留言
版权声明:
作者:wkweb
链接:https://www.wkweb.cn/2194.html
来源:哇咔资源网
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论