Linux caddy的安装与配置

参考资料

  1. Install

目录

  • [一. 前期准备](#一. 前期准备)
    • [1.1 简介](#1.1 简介)
    • [1.2 安装依赖](#1.2 安装依赖)
    • [1.3 创建配置目录](#1.3 创建配置目录)
    • [1.4 创建caddy用户和组](#1.4 创建caddy用户和组)
    • [1.5 为配置目录设置权限](#1.5 为配置目录设置权限)
  • [二. 配置caddy](#二. 配置caddy)
    • [2.1 下载](#2.1 下载)
    • [2.2 编辑配置文件](#2.2 编辑配置文件)
    • [2.3 检查配置文件](#2.3 检查配置文件)
    • [2.4 配置service](#2.4 配置service)
    • [2.5 配置caddy用户绑定443端口](#2.5 配置caddy用户绑定443端口)
  • [三. 启动](#三. 启动)

一. 前期准备

1.1 简介

🔷Caddy 是一款开源的、默认启用 HTTPS 的 Web 服务器,使用 Go 语言编写。最大的特点是配置简单,自动 HTTPS,当检测到用户配置了域名之后,Caddy会自动:

  • 申请 TLS/SSL 证书
  • 完成 HTTPS 配置
  • 自动续期
  • 监听 HTTPS
Caddy Nginx
Web 服务器
反向代理
HTTPS
自动申请证书 ⭐ 非常方便 需要额外配置
自动续期 通常需要 Certbot 等
配置文件 Caddyfile 很简单 nginx.conf 较复杂
性能 很好 非常好
学习成本 较低 较高
Go 编写 C 编写

1.2 安装依赖

🔷caddy运行依赖于定时任务,因此需要安装cron

  • Amazon Linux / RHEL系
bash 复制代码
sudo yum install cronie -y
sudo systemctl enable --now crond
  • Ubuntu / Debian系
bash 复制代码
sudo apt install cron -y
sudo systemctl enable --now cron
系统 安装包 systemd 服务
Amazon Linux / RHEL cronie crond
Ubuntu / Debian cron cron

1.3 创建配置目录

bash 复制代码
# 存放静态页面
sudo mkdir -p /data/www/default
# 存放配置文件
sudo mkdir -p /etc/caddy/
sudo mkdir -p /etc/caddy/conf.d/
# caddy用户目录
sudo mkdir -p /var/lib/caddy/
# 存放log
sudo mkdir -p /var/log/caddy/

1.4 创建caddy用户和组

  • 创建系统组caddy,该组只是为了运行caddy中间件
  • 因为caddy用户只是为了运行caddy中间件而已,所以设置为系统用户,并且禁止使用shell进行登录
bash 复制代码
sudo groupadd --system caddy
sudo useradd --system --gid caddy --create-home --home-dir /var/lib/caddy --shell /usr/sbin/nologin caddy

1.5 为配置目录设置权限

bash 复制代码
sudo chown -R caddy:caddy /var/log/caddy/
sudo chown -R caddy:caddy /var/lib/caddy/
sudo chown -R caddy:caddy /data/www/default/

二. 配置caddy

🔷为了更好的学习,本文采用手动安装的方式

2.1 下载

  • https://caddyserver.com/api/download?os=linux\&arch=amd64
bash 复制代码
# 下载
[ec2-user@ip-172-31-25-58 ~]$ curl -L https://caddyserver.com/api/download?os=linux\&arch=amd64 -o caddy
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 46980k   0 46980k   0     0 13515k     0  --:--:--  0:00:03 --:--:-- 13511k
[ec2-user@ip-172-31-25-58 ~]$
[ec2-user@ip-172-31-25-58 ~]$ ls -l
-rw-r--r--. 1 ec2-user ec2-user 48107682 Sep  1 09:44 caddy
# 赋予执行权限
[ec2-user@ip-172-31-25-58 ~]$ chmod +x caddy
[ec2-user@ip-172-31-25-58 ~]$ sudo mv caddy /usr/bin/caddy
[ec2-user@ip-172-31-25-58 ~]$
[ec2-user@ip-172-31-25-58 ~]$ ls -l /usr/bin/caddy
-rwxr-xr-x. 1 ec2-user ec2-user 48107682 Sep  1 09:44 /usr/bin/caddy
# 查看版本
[ec2-user@ip-172-31-25-58 ~]$ caddy version
v2.11.4 h1:XKxkMTgNSizEvKG6QHue6cAsFOteU2qA61w2tKkCWi0=

2.2 编辑配置文件

  • Caddyfile总配置文件
  • 💥注意,使用tab空格,而不是四个space
bash 复制代码
[ec2-user@ip-172-31-25-58 ~]$ cat /etc/caddy/Caddyfile
{
        admin off
}
:80 {
        # 设置网站的根目录
        root * /data/www/default
        # 开启压缩
        encode gzip
        # 开启静态文件服务
        file_server {
                index index.html
        }
        # 日志配置
        log {
                output file /var/log/caddy/access.log
        }
}

# 导入配置文件
import /etc/caddy/conf.d/*.conf
[ec2-user@ip-172-31-25-58 ~]$
[ec2-user@ip-172-31-25-58 ~]$ cat /data/www/default/index.html
<h1>Hello World</h1>
[ec2-user@ip-172-31-25-58 ~]$
  • 配置根路径重定向
    • 当访问fengyehong.dpdns.org时,重定向到fengyehong.dpdns.org/mw
  • 面板运行在A服务器的8080端口,而订阅节点运行在A服务器的2096端口
  • 不想让服务器暴露太多端口,因此设置域名反向代理
    • 将一个域名指向代理服务器(如 Nginx 或 caddy),由代理服务器接收用户的访问请求
    • 再转发到内网或不同端口的实际后端服务器
      • fengyehong.dpdns.org 走的是 8080端口
      • fengyehong.dpdns.org/xv/*fengyehong.dpdns.org/data/*走的是 2096端口
bash 复制代码
[ec2-user@ip-172-31-25-58 ~]$ cat /etc/caddy/conf.d/fengyehong.dpdns.org.conf
fengyehong.dpdns.org {
        encode gzip

        # 根路径重定向到 /mw 路径
        redir / /mw 302

        # 3X-UI 常规订阅
        handle /xv/* {
                reverse_proxy 127.0.0.1:2096
        }

        # 3X-UI JSON订阅
        handle /data/* {
                reverse_proxy 127.0.0.1:2096
        }

        # 3X-UI 面板
        handle {
                reverse_proxy 127.0.0.1:8080
        }
		
		# 日志配置
        log {
                output file /var/log/caddy/fengyehong_access.log {
                        roll_size 60mb
                        roll_keep 3
                        roll_keep_for 7d
                }
        }
}
[ec2-user@ip-172-31-25-58 ~]$

2.3 检查配置文件

bash 复制代码
[ec2-user@ip-172-31-25-58 ~]$ sudo caddy validate --config /etc/caddy/Caddyfile
2026/09/03 10:28:26.983 INFO    using config from file  {"file": "/etc/caddy/Caddyfile"}
2026/09/03 10:28:26.985 INFO    adapted config to JSON  {"adapter": "caddyfile"}
2026/09/03 10:28:26.986 INFO    http.auto_https server is listening only on the HTTPS port but has no TLS connection policies; adding one to enable TLS {"server_name": "srv0", "https_port": 443}
2026/09/03 10:28:26.986 INFO    http.auto_https enabling automatic HTTP->HTTPS redirects        {"server_name": "srv0"}
2026/09/03 10:28:26.986 WARN    http.auto_https server is listening only on the HTTP port, so no automatic HTTPS will be applied to this server {"server_name": "srv1", "http_port": 80}
2026/09/03 10:28:26.987 INFO    tls.cache.maintenance   started background certificate maintenance      {"cache": "0x9cbd10fa880"}
2026/09/03 10:28:26.987 INFO    http    servers shutting down with eternal grace period
2026/09/03 10:28:26.987 INFO    tls.cache.maintenance   stopped background certificate maintenance      {"cache": "0x9cbd10fa880"}
Valid configuration
[ec2-user@ip-172-31-25-58 ~]$

2.4 配置service

bash 复制代码
[ec2-user@ip-172-31-25-58 ~]$ cat /etc/systemd/system/caddy.service
[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target

[Service]
Type=notify
User=caddy
Group=caddy
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile
TimeoutStopSec=5s
LimitNOFILE=1048576
PrivateTmp=true
ProtectSystem=full
ProtectHome=true

[Install]
WantedBy=multi-user.target
[ec2-user@ip-172-31-25-58 ~]$

2.5 配置caddy用户绑定443端口

  • Linux默认规定root之外的用户不能直接绑定1024以下的端口,但是caddy用户运行caddy服务的时候需要却需要监听系统的443端口
  • 可以给caddy用户添加capability中的cap_net_bind_service,允许绑定1024以下的端口
bash 复制代码
[ec2-user@ip-172-31-25-58 ~]$ sudo setcap cap_net_bind_service=+ep /usr/bin/caddy
[ec2-user@ip-172-31-25-58 ~]$ 
[ec2-user@ip-172-31-25-58 ~]$ getcap /usr/bin/caddy
/usr/bin/caddy cap_net_bind_service=ep
[ec2-user@ip-172-31-25-58 ~]$

三. 启动

  • 启动
bash 复制代码
# 加载配置
sudo systemctl daemon-reload
# 开启启动并立马重新启动
sudo systemctl enable --now caddy
# 重新启动
sudo systemctl restart caddy
  • 查看状态
bash 复制代码
[ec2-user@ip-172-31-25-58 ~]$ systemctl status caddy | head -n 11
● caddy.service - Caddy
     Loaded: loaded (/etc/systemd/system/caddy.service; enabled; preset: disabled)
     Active: active (running) since Wed 2026-09-02 17:04:44 JST; 1 day 2h ago
       Docs: https://caddyserver.com/docs/
   Main PID: 240435 (caddy)
      Tasks: 9 (limit: 1059)
     Memory: 13.3M
        CPU: 12.787s
     CGroup: /system.slice/caddy.service
             └─240435 /usr/bin/caddy run --environ --config /etc/caddy/Caddyfile

[ec2-user@ip-172-31-25-58 ~]$
  • 查看端口占用情况
bash 复制代码
[ec2-user@ip-172-31-25-58 ~]$ sudo ss -lntp | grep caddy
LISTEN 0      4096               *:443              *:*    users:(("caddy",pid=240435,fd=4))
LISTEN 0      4096               *:80               *:*    users:(("caddy",pid=240435,fd=9))
[ec2-user@ip-172-31-25-58 ~]$
相关推荐
晚风叙码1 小时前
Linux(三)apt/yum 软件安装与 vim 编辑器入门指南
linux·编辑器·vim
洪流之源1 小时前
Windows 远程 Ubuntu 24.04 桌面
linux·windows·ubuntu
2401_862880821 小时前
Linux应用层开发 --- HTTP
linux·运维·http
s_w.h1 小时前
【 linux 】线程互斥与同步
java·linux·服务器·开发语言
可爱系程序猿1 小时前
libcrypto-3-x64.dll 加载失败排查:OpenSSL 3 版本、PATH 顺序与 x64 依赖如何对应
linux·运维·服务器·程序人生·电脑
zbyyd1 小时前
Linux 网络编程:IO 多路复用
linux·运维·c语言·网络
fengyehongWorld2 小时前
Linux 域名申请与DNS解析
linux·运维·服务器
晊晌_h2 小时前
嵌入式从0到精通——Linux 网络通信|TCP、HTTP 网络编程
linux·c语言·网络
CounterGlew5112 小时前
Vscode通过ssh链接autodl云服务器并配置codex
运维·服务器·vscode