Caddy 安装与 HTTPS 配置指南

Caddy 安装与 HTTPS 配置指南
目录环境准备下载安装 Caddy生成自签名 SSL 证书编写 Caddyfile 配置准备网站根目录启动与验证配置 systemd 服务开机自启配置访问日志常见问题排查完整 Caddyfile 示例1. 环境准备本文基于以下环境编写请确认你的系统满足最低要求项目要求操作系统主流 Linux 发行版Caddy 版本2.11.4Linux amd64 架构所需工具openssl、systemd权限root 或 sudo 权限说明Caddy 的最大优势在于自动管理 HTTPS 证书。如果你的服务器有公网域名可以直接使用 Let’s Encrypt 自动签发证书无需手动生成。本指南同时涵盖内网自签名证书的方案。2. 下载安装 Caddy步骤 1下载预编译二进制包从 Caddy 官方 GitHub Releases 页面下载对应平台的压缩包。本文以 Linux amd64 为例wgethttps://github.com/caddyserver/caddy/releases/download/v2.11.4/caddy_2.11.4_linux_amd64.tar.gz步骤 2解压并安装到系统路径tarzxvf caddy_2.11.4_linux_amd64.tar.gzmvcaddy /usr/local/bin/chmodx /usr/local/bin/caddy步骤 3清理安装包rm-rfcaddy_2.11.4_linux_amd64.tar.gz步骤 4验证安装caddy version输出v2.11.4表示安装成功。3. 生成自签名 SSL 证书如果你在内网环境、没有公网域名或者需要快速搭建 HTTPS 测试环境可以使用 openssl 生成自签名证书。注意自签名证书会被浏览器标记为不安全。生产环境建议使用公网域名配合 Caddy 的自动 HTTPS 功能。请将下方命令中的192.168.100.131替换为你实际的服务器 IP 或域名。步骤 1创建证书存放目录mkdir-p/etc/caddy/ssl步骤 2生成证书和私钥openssl req-x509-newkeyrsa:2048\-keyout/etc/caddy/ssl/key.pem\-out/etc/caddy/ssl/cert.pem\-days3650\-nodes\-subj/CN192.168.100.132-x509生成自签名证书非 CSR-newkey rsa:2048同时生成 2048 位 RSA 私钥-days 3650有效期 10 年-nodes私钥不加密Caddy 需要读取明文私钥-subj /CNIP证书的通用名称填写服务器 IP 或域名4. 编写 Caddyfile 配置Caddyfile 是 Caddy 的核心配置文件语法简洁。以下提供一个支持 HTTPS 的静态网站配置示例。步骤 1编写 Caddyfilevim/etc/caddy/Caddyfile填入以下内容将192.168.100.131替换为你的实际 IP 或域名# /etc/caddy/Caddyfile 192.168.100.132 { root * /var/www/html file_server tls /etc/caddy/ssl/cert.pem /etc/caddy/ssl/key.pem log { output file /var/log/caddy/access.log { roll_size 100mb roll_keep 5 } } header { X-Content-Type-Options nosniff X-Frame-Options DENY Strict-Transport-Security max-age31536000; includeSubDomains } }关于证书的两条路径内网自签名使用上方配置中的tls指令手动指定证书路径。公网域名如果你的服务器有公网域名只需将192.168.100.131替换为域名并删除tls ...那行Caddy 会自动通过 Let’s Encrypt 签发和续期证书。步骤 2设置文件权限# Caddyfile 归 root 所有caddy 组可读chownroot:caddy /etc/caddy/Caddyfilechmod644/etc/caddy/Caddyfile# 证书目录权限chown-Rcaddy:caddy /etc/caddy/ssl/chmod600/etc/caddy/ssl/key.pemchmod644/etc/caddy/ssl/cert.pem步骤 4验证配置语法caddy validate--config/etc/caddy/Caddyfile无报错输出即表示配置正确。5. 准备网站根目录步骤 1创建根目录并写入测试页面mkdir-p/var/www/htmlvim/var/www/html/index.html写入以下测试内容!DOCTYPEhtmlhtmllangzh-CNheadmetacharsetUTF-8titleCaddy HTTPS Test/title/headbodyh1Hello, Caddy! HTTPS is working./h1pThis page is served over HTTPS./p/body/html步骤 2设置目录权限Caddy 默认以caddy用户运行需要确保该用户对网站目录有读取权限chown-Rcaddy:caddy /var/www/html/6. 启动与验证前台运行测试用# 启动caddy start--config/etc/caddy/Caddyfile# 修改配置后热重载无需停机caddy reload--config/etc/caddy/Caddyfile# 停止caddy stop访问测试浏览器打开https://192.168.100.131请替换为你的实际地址。如果是自签名证书浏览器会提示安全警告点击高级并选择继续访问即可。页面显示 “Hello, Caddy!” 说明 HTTPS 配置成功。7. 配置 systemd 服务开机自启在生产环境中建议将 Caddy 注册为 systemd 服务实现开机自启和进程守护。前提请确保系统上已创建caddy用户。如果没有执行useradd -r -s /sbin/nologin caddy。步骤 1创建 systemd 服务文件vim/etc/systemd/system/caddy.service写入以下内容[Unit] DescriptionCaddy HTTP/2 Web Server Afternetwork-online.target Wantsnetwork-online.target [Service] Typenotify Usercaddy Groupcaddy ExecStart/usr/local/bin/caddy run --config /etc/caddy/Caddyfile ExecReload/usr/local/bin/caddy reload --config /etc/caddy/Caddyfile TimeoutStopSec5s LimitNOFILE1048576 LimitNPROC512 PrivateTmptrue ProtectSystemfull AmbientCapabilitiesCAP_NET_BIND_SERVICE [Install] WantedBymulti-user.target步骤 2重载 systemd 并启动服务# 重新加载 systemd 配置systemctl daemon-reload# 设置开机自启并立即启动systemctlenablecaddy systemctl start caddy步骤 3管理服务# 查看服务状态systemctl status caddy# 重启服务修改配置后systemctl restart caddy# 停止服务systemctl stop caddy# 查看日志journalctl-ucaddy-f8. 常见问题排查Caddy 启动失败错误信息原因与解决方法permission denied检查 caddy 用户对/var/www/html/、/etc/caddy/ssl/、/var/log/caddy/的读取权限address already in use80 或 443 端口被占用使用ss -tlnp | grep -E :80|:443检查并停止占用进程invalid configCaddyfile 语法错误运行caddy validate --config /etc/caddy/Caddyfile查看详细提示caddy.service: failed确认/etc/systemd/system/caddy.service中ExecStart路径正确执行systemctl daemon-reload后重试证书相关问题解决方法浏览器显示不安全自签名证书的正常行为点击高级继续访问即可。如需消除警告请使用公网域名 Let’s Encrypt证书续期自签名证书无法自动续期到期前需手动重新生成。Let’s Encrypt 证书由 Caddy 自动续期CN 与访问地址不匹配确保-subj /CN...中的值与浏览器地址栏输入的 IP 或域名完全一致