IP Address:35.172.111.215



Caddy 是用 Go 语言编写的开源、支持 HTTP/2 的 Web 服务器。Caddy 最突出的功能就是自动为托管网站启用TLS。Caddy 会自动从 Let’s Encrypt 获取并更新 TLS 证书。Caddy 也可以配置成为反向代理服务器,通过 Apache 2许可协议发行。

本文将演示如何在 CentOS 7 系统上安装 Caddy Web 服务器,并在 Caddy 上配置 HTTP 和 HTTPS 网站。

Caddy Web服务器的功能:

  • HTTP/1.1 和 HTTP/2 协议支持
  • HTTPS 自动启用 TLS
  • 支持虚拟主机
  • 原生 IPv4 和 IPv6 支持
  • 反向代理
  • 负载均衡支持
  • Gzip 内容压缩

演示环境说明:

  • 操作系统:CentOS 7.7
  • 主机名:caddy.daehub.com
  • IP 地址:172.16.200.1/24

CentOS 7 系统安装 Caddy

由于 Caddy 是由 Go 语言开发,直接下载程序包解压后即可运行,虽然可以正常使用,但是过程比较麻烦。使用如下命令也可以安装最新版的 Caddy:

# curl https://getcaddy.com | bash -s personal

由于 Caddy 是针对个人用户免费,所以加入了”personal”选项,脚本执行完成后,Caddy 就安装安装成功了。

脚本其实就是帮我们下载对应操作系统最新版的 Caddy 可执行文件,然后把它解压到”/usr/local/bin”目录里。其配置文件需要自己添加。Caddy 的配置文件叫作”Caddyfile”,习惯上把它放置在”/etc/caddy”目录。

同样,为安全起见,Web 服务器一般不使用 root 用户来启动,所以需要创建一个 “caddy”用户,来启动 Caddy Web 服务器。全部命令如下所示:

# mkdir /var/www                                   //创建网站根目录
# adduser -r -s /sbin/nologin -d /var/www caddy    //创建启动 Caddy 用户
# chown caddy:caddy /var/www                       //修改网站根目录属主
# mkdir /etc/caddy                                 //创建配置文件目录
# touch /etc/caddy/Caddyfile                       //创建配置文件
# chown -R root:caddy /etc/caddy                   //修改配置文件属主
# mkdir /etc/ssl/caddy                             //创建证书文件目录
# chown -R caddy:root /etc/ssl/caddy               //修改 Caddy 证书目录属主
# chmod o-rwx /etc/ssl/caddy                       //修改 Caddy 证书目录权限

完成以上准备工作后,理念上 Caddy 就可以正常运行了。可以试着执行一下”caddy”命令,会提示服务器启动并且侦听了”2015″端口,浏览器打开的话会得到”404 Not Found”,说明 Web 服务器已经可以工作了,只是需要配置一下让它符合我们的要求。

为 Caddy 创建 systemd 服务

直接使用命令启动 Caddy 多少有些不方便,还好官方提供了一个添加 systemd 服务的配置文件,按其配置文件添加服务后,Caddy 就可以按照我们预先的设计来工作了。配置文件为”/usr/lib/systemd/system/caddy.service”,内容如下:

[Unit]
Description=Caddy HTTP/2 web server
Documentation=https://caddyserver.com/docs
After=network-online.target
Wants=network-online.target systemd-networkd-wait-online.service

[Service]
Restart=on-abnormal

StartLimitIntervalSec=14400
StartLimitBurst=10

User=caddy
Group=caddy

Environment=CADDYPATH=/etc/ssl/caddy

ExecStart=/usr/local/bin/caddy -log stdout -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp
ExecReload=/bin/kill -USR1 $MAINPID

KillMode=mixed
KillSignal=SIGQUIT
TimeoutStopSec=5s

LimitNOFILE=1048576
LimitNPROC=512

PrivateTmp=true
PrivateDevices=false
ProtectHome=true
ProtectSystem=full
ReadWritePaths=/etc/ssl/caddy
ReadWriteDirectories=/etc/ssl/caddy

[Install]
WantedBy=multi-user.target

至此,Caddy 服务已经添加成功。

Caddyfile 文件中添加 Web 服务器

Caddy 的配置文件添加 Webt 服务器非常容易,只需要指定 HTTP 路径即可。根据之前的设定,我们添加一个 Web 服务器:

http:// {
    root /var/www
    gzip
}

配置内容也很好理解,就是设置侦听的虚拟目录和网站的实际目录,并且启用 gzip 压缩。

根据配置项,我们在网站实际目录添加一个”index.html”文件,大致内容如下:

<html>
    <head><title>Hello World</title>
    <body><h1>Hello World</h1></body>
</html>

再通过浏览器打开网站,就可以看到我们预告设定的首页了。

Caddy 服务器配置 TLS

自动 TLS 是 Caddy Web服务器的独特功能,可将 Caddy 与其他 Web服务器区分开。

如果配置了自动TLS,则 Caddy Web 服务器会自动从 Let’s Encrypt(一个免费,自动和开放的证书颁发机构)请求并续订TLS证书。

Caddy 配置自动证书也非常简单,只需要编辑 Caddyfile 加入自动TLS即可:

caddy.daehub.com {
    root /var/www
    gzip
    tls service@daehub.com
}

需要强调的是:

  1. 由于 Let’s Encrypt 的工作机制要求,caddy.daehub.com 需要为互联网实际注册的域名
  2. tls 指令后面为获取 Let’s Encrypt 证书时使用的邮箱,可以自行设置
  3. tls 指令会通知 Caddy 服务进程使用 Let’s Encrypt 证书来启动 HTTPS服务。

发表评论

电子邮件地址不会被公开。 必填项已用*标注