欢迎,来自IP地址为:18.97.9.175 的朋友
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 }
需要强调的是:
- 由于 Let’s Encrypt 的工作机制要求,caddy.daehub.com 需要为互联网实际注册的域名
- tls 指令后面为获取 Let’s Encrypt 证书时使用的邮箱,可以自行设置
- tls 指令会通知 Caddy 服务进程使用 Let’s Encrypt 证书来启动 HTTPS服务。