• 首页
  • 微语
  • 关于
  • 搜索
  • 夜间模式
    ©2025  枕书 Theme by OneBlog
    搜索
    标签
    默认分类

    Linux系统快速反代网站——Caddy

    2025.10.26 / 71 阅读 / 0 评论 / 3720 字
    默认分类

    Linux系统快速反代网站——Caddy

    阅读 71 评论 0 发表于2025.10.26

    一、为什么选 Caddy?

    相比 Nginx 复杂的配置语法、Apache 厚重的模块依赖,Caddy 从设计之初就围绕 “简单、安全、高效” 展开,以下是它最核心的 5 个优势:

    1. 自动 HTTPS:零配置搞定证书,告别 “证书过期焦虑”

    这是 Caddy 最亮眼的功能 ——​默认开启 HTTPS,自动申请、续期 Let's Encrypt 证书​,无需手动执行 certbot 命令,也不用配置证书路径、定时任务。无论是单域名、多域名还是泛域名,Caddy 都会自动完成验证(HTTP-01 或 DNS-01 挑战),甚至支持自定义证书机构,彻底解决 “HTTPS 配置门槛高” 的痛点。

    反观 Nginx,需要手动申请证书、配置 ssl_certificate​/ssl_certificate_key 字段,还得写定时任务续期,步骤繁琐且容易出错。

    2. 配置语法极简:自然语言风格,上手成本极低

    Caddy 的配置文件(Caddyfile)采用 “类自然语言” 语法,结构清晰,无需记忆复杂的指令。比如实现 “将 example.com​ 反代到 http://127.0.0.1:8080​”,Caddyfile 只需 1 行代码,而 Nginx 需要至少 5-8 行配置(包括 server​、location​、proxy_pass 等块)。

    即使是多站点、多规则的复杂场景,Caddyfile 的可读性也远超 Nginx,新手花 10 分钟就能理解核心语法。

    3. 跨平台无缝兼容:Windows/macOS/Linux 全支持,部署零障碍

    Caddy 是用 Go 语言开发的静态编译程序,无需依赖任何系统库(如 Nginx 依赖的 pcre​、zlib),下载后直接运行。无论是本地 macOS 开发、Windows 测试,还是 Linux 服务器部署,都能使用相同的 Caddyfile 配置,无需修改适配,极大降低了跨环境部署的成本。

    此外,Caddy 还支持 ARM 架构(如树莓派),适合边缘设备场景。

    4. 内置丰富功能:无需额外装模块,满足 90% 场景

    Caddy 内置了反向代理、静态文件服务、缓存、压缩、防盗链、WebSocket 代理等常用功能,无需像 Nginx 那样手动编译模块(如 ngx_http_proxy_module​、ngx_http_gzip_module​)。比如要开启 Gzip 压缩,只需在 Caddyfile 中加 1 行 encode gzip​;要支持 WebSocket 反代,Caddy 会自动识别 Upgrade​/Connection 头,无需额外配置。

    对于需要扩展的场景,Caddy 也支持插件机制,且插件安装简单(编译时指定插件即可)。

    5. 低资源占用:轻量高效,适合小服务器 / 容器

    Caddy 二进制文件体积小(仅十几 MB),运行时内存占用低(通常几十 MB),相比 Nginx(虽也轻量,但配置复杂时易有冗余)更适合资源有限的场景,比如个人博客服务器、Docker 容器内的反代服务。

    同时,Caddy 支持自动 reload 配置(修改 Caddyfile 后无需重启服务,执行 caddy reload 即可),减少服务中断时间。

    二、Caddy 快速反代实战:3 步实现基础反代

    接下来以 “将域名 example.com​ 反代到本地 http://127.0.0.1:3000 的服务” 为例

    前置准备

    • 1 台服务器(或本地电脑),已开放 80/443 端口(HTTPS 依赖这两个端口,Caddy 自动占用);
    • 1 个已解析到服务器 IP 的域名(如 myapp.com);
    • 服务器已安装 curl(用于下载 Caddy)。

    第一步:安装 Caddy

    Caddy 提供官方一键安装脚本,执行以下命令即可完成安装(Linux 系统):

    # 下载并安装 Caddy(官方脚本,安全可靠)
    curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/cfg/setup/bash.deb.sh' | sudo -E bash
    # 安装 Caddy 软件包
    sudo apt install caddy
    # 验证安装:查看 Caddy 版本,出现版本号即安装成功
    caddy version

    第二步:编写 Caddyfile 配置反代

    Caddy 的核心配置文件是 Caddyfile​,默认路径为 /etc/caddy/Caddyfile(Linux 系统),我们只需修改这个文件即可实现反代。

    1. 打开 Caddyfile

    /etc/caddy/Caddyfile #路径

    2. 写入反代配置

    # 第一个站点:myapp.com -> 3000 端口
    myapp.com {
        reverse_proxy http://127.0.0.1:3000
        encode gzip
    }
    
    # 第二个站点:blog.com -> 4000 端口
    blog.com {
        reverse_proxy http://127.0.0.1:4000
        encode gzip
    }

    第三步:启动 Caddy 并验证反代

    1. 启动 Caddy 服务

    # 启动 Caddy 并设置开机自启
    sudo systemctl start caddy
    sudo systemctl enable caddy
    
    # 查看 Caddy 运行状态:出现 "active (running)" 即启动成功
    sudo systemctl status caddy

    2. 验证反代效果

    打开浏览器,输入 https://myapp.com​(注意是 HTTPS),若能看到 http://127.0.0.1:3000 服务的页面,说明反代成功!

    此时,Caddy 已自动完成:

    • 为 myapp.com 申请 Let's Encrypt 证书;
    • 将 https://myapp.com​ 的所有请求转发到 http://127.0.0.1:3000;
    • 自动处理 HTTPS 握手、证书续期。

    ‍

    三、Alpine实现一行代码快速简单反代

    安装Caddy+反代,一键完成

    sudo sh -c "apk add --no-cache caddy libcap-utils && printf 'example.com {\n  reverse_proxy 127.0.0.1:3002\n}\n' > /etc/caddy/Caddyfile && caddy_bin=\$(command -v caddy) && setcap cap_net_bind_service=+ep \"\$caddy_bin\" && pkill -x caddy 2>/dev/null || true; rc-service caddy restart && rc-update add caddy default"

    如需后续需要添加新的反代站点,可以输入

    sudo sh -c "printf '\nexample.com {\n  reverse_proxy http://127.0.0.1:5230\n}\n' >> /etc/caddy/Caddyfile && rc-service caddy reload || rc-service caddy restart"

    ‍

    四、Debian系统实现一行代码快速简单反代

    sudo sh -c "apt update && apt install -y caddy && echo 'example.com { reverse_proxy 127.0.0.1:3000 }' > /etc/caddy/Caddyfile && systemctl restart caddy && systemctl enable caddy"
    本文著作权归作者 [ Miku ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。
    — END —
    首页微语关于
    Copyright©2025  All Rights Reserved.  Load:0.015 s
    Theme by OneBlog V3.6.4
    夜间模式

    开源不易,请尊重作者版权,保留基本的版权信息。