1. 首页 > IT综合教程 > 正文

254. Caddy Web服务器培训

一、Caddy概述

Caddy是一个现代化的Web服务器,以自动HTTPS、简单配置和高性能著称。内置Let’s Encrypt证书自动申请和续期功能。

1.1 Caddy核心特性

  • 自动HTTPS:自动申请和续期SSL证书
  • 简单配置:使用Caddyfile,配置简洁直观
  • 高性能:基于Go语言开发,性能优异
  • HTTP/3支持:原生支持HTTP/3和QUIC协议

二、Caddy安装部署

2.1 二进制安装

# 下载Caddy
wget https://github.com/caddyserver/caddy/releases/download/v2.7.6/caddy_2.7.6_linux_amd64.tar.gz

# 解压安装
tar -xzf caddy_2.7.6_linux_amd64.tar.gz -C /usr/local/bin/

# 创建caddy用户
groupadd --system caddy
useradd --system --gid caddy --create-home --home-dir /var/lib/caddy --shell /usr/sbin/nologin caddy

# 创建目录
mkdir -p /etc/caddy
mkdir -p /var/www/html
chown -R caddy:caddy /var/www/html

# 创建systemd服务
cat > /etc/systemd/system/caddy.service << 'EOF'
[Unit]
Description=Caddy HTTP/2 web server
Documentation=https://caddyserver.com/docs/
After=network-online.target
Wants=network-online.target

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

[Install]
WantedBy=multi-user.target
EOF

# 启动服务
systemctl daemon-reload
systemctl start caddy
systemctl enable caddy

# 查看版本
caddy version
# 输出示例
v2.7.6 h1:bP28d1CmKbZpYPlmO2E3GtBj5F4uQ1FZT5f2F3G4H5I6J7K8L9M0N1O2P3Q4R5S6T7U8V9W0X1Y2Z3A4B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4V5W6X7Y8Z9A0B1C2D3E4F5G6H7I8J9K0L1M2N3O4P5Q6R7S8T9U0V1W2X3Y4Z5A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4T5U6V7W8X9Y0Z1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R9S0T1U2V3W4X5Y6Z7A8B9C0D1E2F3G4H5I6J7K8L9M0N1O2P3Q4R5S6T7U8V9W0X1Y2Z3A4B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4V5W6X7Y8Z9A0B1C2D3E4F5G6H7I8J9K0L1M2N3O4P5Q6R7S8T9U0V1W2X3Y4Z5A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4T5U6V7W8X9Y0Z1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R9S0T1U2V3W4X5Y6Z7A8B9C0D1E2F3G4H5I6J7K8L9M0N1O2P3Q4R5S6T7U8V9W0X1Y2Z3A4B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4V5W6X7Y8Z9A0B1C2D3E4F5G6H7I8J9K0L1M2N3O4P5Q6R7S8T9U0V1W2X3Y4Z5A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4T5U6V7W8X9Y0Z1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R9S0T1U2V3W4X5Y6Z7A8B9C0D1E2F3G4H5I6J7K8L9M0N1O2P3Q4R5S6T7U8V9W0X1Y2Z3A4B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4V5W6X7Y8Z9A0B1C2D3E4F5G6H7I8J9K0L1M2N3O4P5Q6R7S8T9U0V1W2X3Y4Z5A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4T5U6V7W8X9Y0Z1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R9S0T1U2V3W4X5Y6Z7A8B9C0D1E2F3G4H5I6J7K8L9M0N1O2P3Q4R5S6T7U8V9W0X1Y2Z3A4B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4V5W6X7Y8Z9A0B1C2D3E4F5G6H7I8J9K0L1M2N3O4P5Q6R7S8T9U0V1W2X3Y4Z5A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4T5U6V7W8X9Y0Z1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R9S0T1U2V3W4X5Y6Z7A8B9C0D1E2F3G4H5I6J7K8L9M0N1O2P3Q4R5S6T7U8V9W0X1Y2Z3A4B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4V5W6X7Y8Z9A0B1C2D3E4F5G6H7I8J9K0L1M2N3O4P5Q6R7S8T9U0V1W2X3Y4Z5A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4T5U6V7W8X9Y0Z1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R9S0T1U2V3W4X5Y6Z7A8B9C0D1E2F3G4H5I6J7K8L9M0N1O2P3Q4R5S6T7U8V9W0X1Y2Z3A4B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4V5W6X7Y8Z9A0B1C2D3E4F5G6H7I8J9K0L1M2N3O4P5Q6R7S8T9U0V1W2X3Y4Z5A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4T5U6V7W8X9Y0Z1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R9S0T1U2V3W4X5Y6Z7A8B9C0D1E2F3G4H5I6J7K8L9M0N1O2P3Q4R5S6T7U8V9W0X1Y2Z3A4B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4V5W6X7Y8Z9A0B1C2D3E4F5G6H7I8J9K0L1M2N3O4P5Q6R7S8T9U0V1W2X3Y4Z5A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4T5U6V7W8X9Y0Z1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R9S0T1U2V3W4X5Y6Z7A8B9C0D1E2F3G4H5I6J7K8L9M0N1O2P3Q4R5S6T7U8V9W0X1Y2Z3A4B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4V5W6X7Y8Z9A0B1C2D3E4F5G6H7I8J9K0L1M2N3O4P5Q6R7S8T9U0V1W2X3Y4Z5A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4T5U6V7W8X9Y0Z1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R9S0T1U2V3W4X5Y6Z7A8B9C0D1E2F3G4H5I6J7K8L9M0N1O2P3Q4R5S6T7U8V9W0X1Y2Z3A4B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4V5W6X7Y8Z9A0B1C2D3E4F5G6H7I8J9K0L1M2N3O4P5Q6R7S8T9U0V1W2X3Y4Z5A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4T5U6V7W8X9Y0Z1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R9S0T1U2V3W4X5Y6Z7A8B9C0D1E2F3G4H5I6J7K8L9M0N1O2P3Q4R5S6T7U8V9W0X1Y2Z3A4B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4V5W6X7Y8Z9A0B1C2D3E4F5G6H7I8J9K0L1M2N3O4P5Q6R7S8T9U0V1W2X3Y4Z5A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4T5U6V7W8X9Y0Z1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R9S0T1U2V3W4X5Y6Z7A8B9C0D1E2F3G4H5I6J7K8L9M0N1O2P3Q4R5S6T7U8V9W0X1Y2Z3A4B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4V5W6X7Y8Z9A0B1C2D3E4F5G6H7I8J9K0L1M2N3O4P5Q6R7S8T9U0V1W2X3Y4Z5A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4T5U6V7W8X9Y0Z1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R9S0T1U2V3W4X5Y6Z7A8B9C0D1E2F3G4H5I6J7K8L9M0N1O2P3Q4R5S6T7U8V9W0X1Y2Z3A4B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4V5W6X7Y8Z9A0B1C2D3E4F5G6H7I8J9K0L1M2N3O4P5Q6R7S8T9U0V1W2X3Y4Z5A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4T5U6V7W8X9Y0Z1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R9S0T1U2V3W4X5Y6Z7A8B9C0D1E2F3G4H5I6J7K8L9M0N1O2P3Q4R5S6T7U8V9W0X1Y2Z3A4B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4V5W6X7Y8Z9A0B1C2D3E4F5G6H7I8J9K0L1M2N3O4P5Q6R7S8T9U0V1W2X3Y4Z5A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4T5U6V7W8X9Y0Z1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R9S0T1U2V3W4X5Y6Z7A8B9C0D1E2F3G4H5I6J7K8L9M0N1O2P3Q4R5S6T7U8V9W0X1Y2Z3A4B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4V5W6X7Y8Z9A0B1C2D3E4F5G6H7I8J9K0L1M2N3O4P5Q6R7S8T9U0

三、Caddyfile配置

3.1 基本配置

# /etc/caddy/Caddyfile

# 简单静态网站
fgedu.net.cn {
    root * /var/www/html
    file_server
}

# 多域名配置
www.fgedu.net.cn, fgedu.net.cn {
    redir https://fgedu.net.cn{uri} permanent
}

# 反向代理
api.fgedu.net.cn {
    reverse_proxy fgedudb:8080
}

# PHP应用
php.fgedu.net.cn {
    root * /var/www/php
    php_fastcgi unix//run/php/php-fpm.sock
    file_server
}

3.2 自动HTTPS配置

# 自动HTTPS(默认)
fgedu.net.cn {
    # 自动申请Let's Encrypt证书
    tls admin@fgedu.net.cn
}

# 使用自定义证书
fgedu.net.cn {
    tls /etc/ssl/cert.pem /etc/ssl/key.pem
}

# 内部使用自签名证书
internal.fgedu.net.cn {
    tls internal
}

# 禁用HTTPS
http://fgedu.net.cn {
    respond "Hello, HTTP!"
}

四、反向代理配置

4.1 基本反向代理

# 单后端代理
api.fgedu.net.cn {
    reverse_proxy fgedudb:8080
}

# 多后端负载均衡
api.fgedu.net.cn {
    reverse_proxy {
        to 192.168.1.101:8080
        to 192.168.1.102:8080
        to 192.168.1.103:8080
        
        # 负载均衡策略
        lb_policy round_robin
        # lb_policy least_conn
        # lb_policy ip_hash
        
        # 健康检查
        health_path /health
        health_interval 10s
        health_timeout 5s
    }
}

4.2 高级代理配置

# 带请求头的代理
api.fgedu.net.cn {
    reverse_proxy fgedudb:8080 {
        header_up Host {host}
        header_up X-Real-IP {remote_host}
        header_up X-Forwarded-For {remote_host}
        header_up X-Forwarded-Proto {scheme}
        
        header_down -Server
    }
}

# WebSocket代理
ws.fgedu.net.cn {
    reverse_proxy fgedudb:9000 {
        header_up Connection {>Connection}
        header_up Upgrade {>Upgrade}
    }
}

# 路径匹配代理
fgedu.net.cn {
    reverse_proxy /api/* fgedudb:8080
    reverse_proxy /ws/* fgedudb:9000
    reverse_proxy /* fgedudb:3000
}

五、静态文件服务

5.1 文件服务器配置

# 静态文件服务
static.fgedu.net.cn {
    root * /var/www/static
    file_server {
        browse  # 启用目录浏览
        precompressed gzip br
    }
    
    # 缓存配置
    @static {
        path *.css *.js *.png *.jpg *.gif *.ico
    }
    header @static Cache-Control "public, max-age=31536000"
}

# 带压缩的文件服务
fgedu.net.cn {
    root * /var/www/html
    encode gzip zstd br
    file_server
}

六、API配置

6.1 JSON配置

# 使用JSON配置
caddy adapt --config /etc/caddy/Caddyfile --pretty

# caddy.json示例
{
    "apps": {
        "http": {
            "servers": {
                "srv0": {
                    "listen": [":443"],
                    "routes": [{
                        "match": [{
                            "host": ["fgedu.net.cn"]
                        }],
                        "handle": [{
                            "handler": "file_server",
                            "root": "/var/www/html"
                        }]
                    }],
                    "tls_connection_policies": [{
                        "match": {"sni": ["fgedu.net.cn"]}
                    }]
                }
            }
        },
        "tls": {
            "automation": {
                "policies": [{
                    "subjects": ["fgedu.net.cn"],
                    "issuer": {
                        "email": "admin@fgedu.net.cn",
                        "module": "acme"
                    }
                }]
            }
        }
    }
}

6.2 API管理

# 启用管理API
{
    "admin": {
        "listen": "0.0.0.0:2019"
    }
}

# 查看配置
curl fgedudb:2019/config/

# 更新配置
curl -X POST -H "Content-Type: application/json" \
    -d @caddy.json fgedudb:2019/load

# 查看路由
curl fgedudb:2019/routes/

# 查看证书
curl fgedudb:2019/certificates/

七、日志与监控

7.1 日志配置

# 访问日志
fgedu.net.cn {
    log {
        output file /var/log/caddy/access.log {
            roll_size 100mb
            roll_keep 10
        }
        format json
        level INFO
    }
    
    root * /var/www/html
    file_server
}

# 自定义日志格式
fgedu.net.cn {
    log {
        format console {
            time_format "2006-01-02 15:04:05"
        }
    }
}

7.2 Prometheus监控

# 启用Prometheus指标
{
    "apps": {
        "http": {
            "servers": {
                "metrics": {
                    "listen": [":2019"],
                    "routes": [{
                        "match": [{"path": ["/metrics"]}],
                        "handle": [{
                            "handler": "metrics"
                        }]
                    }]
                }
            }
        }
    }
}

# prometheus.yml配置
scrape_configs:
  - job_name: 'caddy'
    static_configs:
      - targets: ['fgedudb:2019']

# 关键指标
caddy_http_requests_total
caddy_http_request_duration_seconds
caddy_http_response_size_bytes

八、运维命令

8.1 常用管理命令

# 验证配置
caddy validate --config /etc/caddy/Caddyfile

# 格式化配置
caddy fmt --overwrite /etc/caddy/Caddyfile

# 启动服务
caddy run --config /etc/caddy/Caddyfile

# 后台运行
caddy start --config /etc/caddy/Caddyfile

# 停止服务
caddy stop

# 重载配置
caddy reload --config /etc/caddy/Caddyfile

# 查看证书
caddy list-certificates

# 信任证书
caddy trust

# 清理证书
caddy untrust --cert fgedu.net.cn

九、最佳实践

9.1 配置建议

配置项 建议值 说明
encode gzip zstd 启用压缩
log json格式 便于日志分析
tls 自动HTTPS 自动证书管理
注意事项:

  • 确保域名DNS已正确解析
  • 80和443端口需要可访问
  • 证书申请有频率限制
  • 定期备份配置文件

十、总结

Caddy是现代化的Web服务器,配置简单,自动HTTPS。通过本培训文档,您应该掌握了:

学习交流加群风哥微信: itpux-com

  • Caddy的安装部署
  • Caddyfile配置语法
  • 自动HTTPS配置
  • 反向代理和负载均衡
  • 静态文件服务
  • 日志监控和运维管理
IT运维培训文档系列 | 第254篇 | Caddy Web服务器培训

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息