---
title: caddy教程：nginx难用？配置证书很麻烦？试试caddy吧
published: 2025-01-03
tags: [Docker, 教程]
category: 教程
draft: false
---

### 介绍

caddy是和nginx一样的强大的web服务，使用go语言编写并且也是完全开源，`优点是配置简单，并且自动申请并部署SSL证书`，无需手动配置，大大简化了运维工作，对小白非常友好，唯一的缺点是并发量稍微不及nginx，但是这点缺点几乎可以忽略不记。除非你的网站流量高的离谱，对于一般的企业是达不到那种流量的，个人就更达不到的。

### 我的使用场景

除了一般的网页服务，我经常配合docker使用，由于我比较喜欢用docker，所以经常使用`caddy` 或者 `nginx-proxy-manager`来反代docker的端口，他俩使用都很简单，本文着重介绍caddy。

1：安装caddy

由于CentOS已经停止维护，本文只介绍当前主流的系统debian和ubuntu系统，使用apt包安装。

```
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl

curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg

curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list

sudo apt update

sudo apt install caddy -yq
```
2：配置示例

配置路径 `/etc/caddy/Caddyfile`

将域名`example.com`反向代理到本地`8080`端口

`caddyfile`配置

```
example.com {
    encode gzip
    reverse_proxy localhost:8080
}
```

将域名`example.com`代理到网站目录`/var/www`

`caddyfile`配置

```
example.com {
    root * /var/www
    encode zstd gzip
    file_server
}
```

3：常用命令

启动caddy

```
sudo systemctl restart caddy
```

caddy会占用80和443端口，api服务会占用本地2019端口，启动后会自动接管域名的证书管理，自动申请SSL证书和开启HTTPS加密。Caddy 默认使用 Let's Encrypt 作为证书颁发机构（CA）来自动签发 SSL/TLS 证书，Let's Encrypt申请证书有频率限制，如果你是测试使用，可以在caddy配置文件的域名指定为http格式，不开启HTTPS加密，例如caddy配置中域名可以这样写 http://example.com

查看运行状态

```
systemctl status caddy
```

检查配置语法是否正确

```
caddy validate --config /etc/caddy/Caddyfile
```

停止服务

```
sudo systemctl stop caddy
```

完全卸载

```
sudo apt-get purge --auto-remove caddy
```

证书路径

```
/var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory
```
