Caddy 部署文件服务器 📂


📖 目录导航


🌟 简介

本指南介绍如何使用 Caddy 服务器部署高性能的文件下载服务,并配置负载均衡。Caddy 是一个现代化的 web 服务器,以其简单的配置、自动 HTTPS 和高性能而闻名。

服务信息:


🔧 一、Debian/Ubuntu 安装 Caddy

1. 安装 Caddy

1
2
3
4
5
6
7
8
# 更新包列表并安装 Caddy
sudo apt update && sudo apt install caddy -y

# 验证安装
caddy version

# 查看 Caddy 状态
sudo systemctl status caddy

2. 卸载 Caddy

1
2
3
4
5
6
# 停止并卸载 Caddy
sudo systemctl stop caddy
sudo apt remove caddy -y

# 清理配置文件(可选)
sudo rm -rf /etc/caddy /var/lib/caddy

3. 创建共享文件夹

1
2
3
4
5
6
# 创建 Windows 文件目录
sudo mkdir -p /usr/share/caddy/windows

# 设置权限
sudo chown -R www-data:www-data /usr/share/caddy
sudo chmod -R 755 /usr/share/caddy

4. 文件同步

1
2
3
4
# 同步文件到下载目录
rsync -avhzp --progress --delete \
"/mnt/ARS2-NFS/阿里云盘/教程文件/Win系统/全自动获取hostIP/windows自动写入hosts(需要管理员权限)_24.8.30_v1.1.zip" \
/usr/share/caddy/windows/

🚀 二、Debian 部署文件下载服务

1. 创建文件目录

1
2
3
4
5
6
7
# 创建文件下载目录
sudo mkdir -p /mnt/ARS2-NFS/file
sudo mkdir -p /mnt/file

# 设置权限
sudo chown -R www-data:www-data /mnt/ARS2-NFS/file /mnt/file
sudo chmod -R 755 /mnt/ARS2-NFS/file /mnt/file

2. 配置 Caddyfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# 创建并配置 Caddyfile
sudo tee /etc/caddy/Caddyfile > /dev/null <<'EOF'
# 全局配置
{
# 关闭管理接口
admin off

# 自动 HTTPS 配置
auto_https disable_redirects

# 日志配置
log {
output file /var/log/caddy/access.log {
roll_size 100MB
roll_keep 10
roll_keep_for 720h
}
format json
}
}

# 文件下载服务 - 端口 11300
:11300 {
# 启用 gzip 压缩
encode gzip zstd

# 指定静态文件根目录
root * /mnt/file/

# 启用文件服务器功能,支持目录浏览
file_server browse

# 安全头部
header {
X-Content-Type-Options nosniff
X-Frame-Options DENY
X-XSS-Protection "1; mode=block"
}

# 设置默认文件类型为下载
header Content-Type application/octet-stream

# 允许跨域请求(可选)
header Access-Control-Allow-Origin "*"

# 禁用缓存,确保总是获取最新文件
header Cache-Control "no-cache, no-store, must-revalidate"

# 日志配置
log {
output file /var/log/caddy/download.log
format json
}
}

# HTTPS 文件服务 - 端口 888
file.meimolihan.eu.org:888 {
# 启用 gzip 压缩
encode gzip zstd

# 指定静态文件根目录
root * /mnt/ARS2-NFS/file/

# 启用文件服务器功能,支持目录浏览
file_server browse

# TLS 配置
tls {
ciphers TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
curves x25519 secp521r1 secp384r1
alpn http/1.1 h2
}

# 安全头部
header {
X-Content-Type-Options nosniff
X-Frame-Options DENY
X-XSS-Protection "1; mode=block"
Strict-Transport-Security "max-age=31536000; includeSubDomains"
}

# 设置默认文件类型为下载
header Content-Type application/octet-stream

# 允许跨域请求(可选)
header Access-Control-Allow-Origin "*"

# 禁用缓存
header Cache-Control "no-cache, no-store, must-revalidate"

# 日志配置
log {
output file /var/log/caddy/https_download.log
format json
}

# 基本认证(可选)
# basicauth /download/* {
# user1 $2y$10$AbCdEfGhIjKlMnOpQrStUvWxYzAbCdEfGhIjKlMnOpQrStUv
# }
}
EOF

3. 管理 Caddy 服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 查看配置文件
cat /etc/caddy/Caddyfile

# 测试配置文件语法
sudo caddy validate --config /etc/caddy/Caddyfile

# 重启 Caddy 服务
sudo systemctl restart caddy

# 查看 Caddy 状态
sudo systemctl status caddy

# 启用开机自启
sudo systemctl enable caddy

# 重新加载配置(不中断服务)
sudo systemctl reload caddy

# 停止服务
sudo systemctl stop caddy

# 查看日志
sudo tail -f /var/log/caddy/access.log

4. 创建测试文件

1
2
3
4
5
6
# 创建测试文件
echo "这是一个测试文件" | sudo tee /mnt/file/test.txt
echo "这是另一个测试文件" | sudo tee /mnt/ARS2-NFS/file/sample.txt

# 创建大文件测试(100MB)
sudo dd if=/dev/zero of=/mnt/file/largefile.bin bs=1M count=100

📥 三、文件下载命令

1. 本地路径操作

1
2
3
4
5
6
7
8
# 查看文件目录
ls -la /mnt/ARS2-NFS/file/

# 进入目录
cd /mnt/ARS2-NFS/file/

# 查看文件列表
find /mnt/ARS2-NFS/file/ -type f | head -10

2. 文件下载命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 简单下载(下载到当前目录)
curl -# -O https://file.meimolihan.eu.org:888/test.txt

# 指定下载目录和文件名
mkdir -p ~/downloads && curl -# -L -o ~/downloads/test.txt https://file.meimolihan.eu.org:888/test.txt

# 下载大文件并显示进度
curl -# -L -o ~/downloads/largefile.bin https://file.meimolihan.eu.org:888/largefile.bin

# 使用 wget 下载
wget -O ~/downloads/test.txt https://file.meimolihan.eu.org:888/test.txt

# 批量下载脚本
#!/bin/bash
files=("file1.txt" "file2.txt" "file3.zip")
for file in "${files[@]}"; do
echo "下载: $file"
curl -# -L -o "/tmp/$file" "https://file.meimolihan.eu.org:888/$file"
done

3. 设置文件权限

1
2
3
4
5
6
# 为下载的脚本文件添加执行权限
chmod +x ~/downloads/DnsParse.py

# 批量设置权限
find ~/downloads -name "*.sh" -exec chmod +x {} \;
find ~/downloads -name "*.py" -exec chmod +x {} \;

⚖️ 四、负载均衡配置

1. 负载均衡器配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 创建负载均衡配置
sudo tee /etc/caddy/load-balancer.conf > /dev/null <<'EOF'
# 负载均衡配置
:888 {
# 定义上游服务器
reverse_proxy {
to 10.10.10.245:11300 10.10.10.247:11300

# 负载均衡策略
lb_policy round_robin

# 健康检查
health_uri /health
health_interval 30s
health_timeout 5s
health_status 200
}

# TLS 配置
tls {
ciphers TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
curves x25519 secp521r1 secp384r1
}

# 安全头部
header {
X-Content-Type-Options nosniff
X-Frame-Options DENY
X-XSS-Protection "1; mode=block"
Strict-Transport-Security "max-age=31536000; includeSubDomains"
}
}
EOF

2. 后端服务器配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 在每个后端服务器上配置
sudo tee /etc/caddy/backend.conf > /dev/null <<'EOF'
:11300 {
# 启用 gzip 压缩
encode gzip

# 指定静态文件根目录
root * /mnt/ARS2-NFS/file/

# 启用文件服务器功能
file_server browse

# 健康检查端点
handle /health {
respond 200 "Healthy"
}

# 安全头部
header {
X-Content-Type-Options nosniff
X-Frame-Options DENY
}
}
EOF

3. 同步文件内容

1
2
3
4
5
# 使用 rsync 同步文件内容
rsync -avh --delete /mnt/ARS2-NFS/file/ user@10.10.10.247:/mnt/ARS2-NFS/file/

# 设置定时同步(可选)
(crontab -l 2>/dev/null; echo "0 2 * * * rsync -avh --delete /mnt/ARS2-NFS/file/ user@10.10.10.247:/mnt/ARS2-NFS/file/") | crontab -

🔒 五、安全加固

1. 防火墙配置

1
2
3
4
5
6
7
8
9
10
11
12
# 启用 UFW 防火墙
sudo ufw enable

# 开放必要端口
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw allow 888/tcp # 文件服务端口
sudo ufw allow 11300/tcp # 内部服务端口

# 查看防火墙状态
sudo ufw status verbose

2. 访问控制

1
2
3
4
5
6
7
8
9
10
11
12
13
# 创建 IP 白名单配置
sudo tee /etc/caddy/whitelist.conf > /dev/null <<'EOF'
# IP 白名单配置
@whitelist {
remote_ip 192.168.1.0/24 10.10.10.0/24
}

# 只允许白名单 IP 访问管理接口
handle /admin/* {
@blocked not remote_ip 192.168.1.100 10.10.10.50
respond @blocked 403
}
EOF

3. 速率限制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 创建速率限制配置
sudo tee /etc/caddy/rate-limit.conf > /dev/null <<'EOF'
# 速率限制配置
@rate_limit {
remote_ip 192.168.1.0/24
}

limit_rate @rate_limit 100k

# 请求速率限制
rate_limit {
zone rate_limit_zone 10m 10r/s
key $remote_ip
}
EOF

🐛 六、故障排除

1. 常见问题解决

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 检查 Caddy 状态
sudo systemctl status caddy

# 查看错误日志
sudo tail -f /var/log/caddy/access.log
sudo journalctl -u caddy -f

# 测试端口访问
curl -I http://localhost:11300
curl -I https://file.meimolihan.eu.org:888

# 检查端口占用
sudo netstat -tulnp | grep :11300
sudo netstat -tulnp | grep :888

# 检查文件权限
namei -l /mnt/ARS2-NFS/file/test.txt

# 测试文件下载
curl -O http://localhost:11300/test.txt

2. 性能优化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 启用内存缓存(在大内存服务器上)
sudo tee /etc/caddy/cache.conf > /dev/null <<'EOF'
# 缓存配置
cache {
memory {
capacity 256MB
ttl 1h
}

# 静态资源缓存
match_path /static/* /downloads/*
}
EOF

# 调整系统文件描述符限制
echo "fs.file-max = 100000" | sudo tee -a /etc/sysctl.conf
echo "* soft nofile 100000" | sudo tee -a /etc/security/limits.conf
echo "* hard nofile 100000" | sudo tee -a /etc/security/limits.conf

3. 监控脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 创建监控脚本
sudo tee /usr/local/bin/monitor-caddy.sh > /dev/null <<'EOF'
#!/bin/bash
# Caddy 服务监控脚本

LOG_FILE="/var/log/caddy/access.log"
ERROR_LOG="/var/log/caddy/error.log"

echo "=== Caddy 服务监控 ==="
echo "当前时间: $(date)"
echo ""

# 检查服务状态
if systemctl is-active --quiet caddy; then
echo "✅ Caddy 服务运行正常"
else
echo "❌ Caddy 服务未运行"
echo "尝试启动服务..."
sudo systemctl start caddy
sleep 2
if systemctl is-active --quiet caddy; then
echo "✅ Caddy 服务已启动"
else
echo "❌ 启动失败,请检查日志"
fi
fi

echo ""
echo "📊 连接统计:"
netstat -an | grep :11300 | awk '{print $6}' | sort | uniq -c
netstat -an | grep :888 | awk '{print $6}' | sort | uniq -c

echo ""
echo "📈 最近访问:"
tail -n 10 $LOG_FILE | awk '{print $1, $4, $7, $9}'

echo ""
echo "⚠️ 最近错误:"
tail -n 5 $ERROR_LOG 2>/dev/null || echo "无错误日志"
EOF

# 设置脚本权限
sudo chmod +x /usr/local/bin/monitor-caddy.sh

# 添加到定时任务
(crontab -l 2>/dev/null; echo "*/5 * * * * /usr/local/bin/monitor-caddy.sh >> /var/log/caddy/monitor.log") | crontab -

通过本指南,您已经成功部署了一个高性能的 Caddy 文件下载服务,并配置了负载均衡。这个解决方案提供了以下优势:

  1. 高性能:Caddy 提供优异的静态文件服务性能
  2. 自动 HTTPS:无需手动配置 SSL 证书
  3. 负载均衡:支持多台服务器分担负载
  4. 易于管理:简洁的配置文件格式
  5. 安全加固:内置安全功能和访问控制

您现在可以通过 https://file.meimolihan.eu.org:888 访问文件下载服务了!🎉

💡 提示

  • 定期检查日志文件以监控服务状态
  • 使用负载均衡时确保后端服务器文件同步
  • 考虑设置定期备份重要文件
  • 监控磁盘空间使用情况,避免存储不足