介绍
Caddy 是一个新兴的 Web 服务器程序,原生支持 HTTP/2 和自动 HTTPS。 考虑到易用性和安全性,Caddy 可用于通过单个配置文件快速部署启用 HTTPS 的站点。
先决条件
- 一个全新的 Vultr CentOS 7 x64 服务器实例。 我们将使用
203.0.113.1
作为 example. - 一个 sudo 用户。
- 服务器实例已使用 EPEL YUM 存储库更新到最新的稳定状态。
- 一个域
example.com
已配置为指向203.0.113.1
服务器实例。 在另一个 Vultr 教程中查看详细信息。
步骤 1:安装 Caddy 的最新稳定版本
在 Linux、Mac 或 BSD 操作系统上,使用以下命令安装 Caddy 的最新稳定系统特定版本:
curl https://getcaddy.com | bash
出现提示时,输入您的 sudo 密码完成安装。
Caddy 二进制文件将安装到 /usr/local/bin
目录。 使用以下命令确认:
which caddy
输出应该是:
/usr/local/bin/caddy
出于安全考虑, 绝不 以 root 身份运行 Caddy 二进制文件。 为了让 Caddy 能够以非 root 用户身份绑定到特权端口(例如 80、443),您需要运行 setcap
命令如下:
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy
第 2 步:配置 Caddy
创建专用系统用户: caddy
和一组同名的 Caddy:
sudo useradd -r -d /var/www -M -s /sbin/nologin caddy
笔记: 用户 caddy
此处创建只能用于管理Caddy服务,不能用于登录。
创建主目录 /var/www
用于 Caddy Web 服务器和主目录 /var/www/example.com
为您的网站:
sudo mkdir -p /var/www/example.com
sudo chown -R caddy:caddy /var/www
创建一个目录来存储 SSL 证书:
sudo mkdir /etc/ssl/caddy
sudo chown -R caddy:root /etc/ssl/caddy
sudo chmod 0770 /etc/ssl/caddy
创建一个专门的目录来存储 Caddy 配置文件 Caddyfile
:
sudo mkdir /etc/caddy
sudo chown -R root:caddy /etc/caddy
创建名为的 Caddy 配置文件 Caddyfile
:
sudo touch /etc/caddy/Caddyfile
sudo chown caddy:caddy /etc/caddy/Caddyfile
sudo chmod 444 /etc/caddy/Caddyfile
cat <<EOF | sudo tee -a /etc/caddy/Caddyfile
example.com {
root /var/www/example.com
gzip
tls [email protected]
}
EOF
笔记: 这 Caddyfile
上面创建的文件只是运行静态网站的基本配置。 您可以了解有关怎样编写 Caddyfile 的更多信息 这里.
为了方便 Caddy 的操作,您可以设置一个 systemd
Caddy 的单元文件,然后使用 systemd
管理球童。
使用 vi
创建 Caddy 的编辑器 systemd
单元文件:
sudo vi /etc/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
; User and group the process will run as.
User=caddy
Group=caddy
; Letsencrypt-issued certificates will be written to this directory.
Environment=CADDYPATH=/etc/ssl/caddy
; Always set "-root" to something safe in case it gets forgotten in the Caddyfile.
ExecStart=/usr/local/bin/caddy -log stdout -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp
ExecReload=/bin/kill -USR1 $MAINPID
; Use graceful shutdown with a reasonable timeout
KillMode=mixed
KillSignal=SIGQUIT
TimeoutStopSec=5s
; Limit the number of file descriptors; see `man systemd.exec` for more limit settings.
LimitNOFILE=1048576
; Unmodified caddy is not expected to use more than that.
LimitNPROC=512
; Use private /tmp and /var/tmp, which are discarded after caddy stops.
PrivateTmp=true
; Use a minimal /dev
PrivateDevices=true
; Hide /home, /root, and /run/user. Nobody will steal your SSH-keys.
ProtectHome=true
; Make /usr, /boot, /etc and possibly some more folders read-only.
ProtectSystem=full
; … except /etc/ssl/caddy, because we want Letsencrypt-certificates there.
; This merely retains r/w access rights, it does not add any new. Must still be writable on the host!
ReadWriteDirectories=/etc/ssl/caddy
; The following additional security directives only work with systemd v229 or later.
; They further retrict privileges that can be gained by caddy. Uncomment if you like.
; Note that you may have to add capabilities required by any plugins in use.
;CapabilityBoundingSet=CAP_NET_BIND_SERVICE
;AmbientCapabilities=CAP_NET_BIND_SERVICE
;NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
Save 并退出:
:wq!
启动 Caddy 服务并使其在系统启动时自动启动:
sudo systemctl daemon-reload
sudo systemctl start caddy.service
sudo systemctl enable caddy.service
第三步:修改防火墙规则
为了允许访问者访问您的 Caddy 站点,您需要打开端口 80 和 443:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
第 4 步:为您的站点创建一个测试页面
使用以下命令创建一个名为 index.html
在您的 Caddy 站点主目录中:
echo '<h1>Hello World!</h1>' | sudo tee /var/www/example.com/index.html
重启 Caddy 服务以加载新内容:
sudo systemctl restart caddy.service
最后,将您的网络浏览器指向 https://example.com
或者 https://example.com
. 你应该看到消息 Hello World!
正如预期的那样。
注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com