本文档将指导您在 CentOS(或其他 Linux 发行版)上安装 Caddy,并配置一个通过 Web 浏览指定文件夹的服务,同时启用 HTTP 基本认证(用户名+密码),确保只有授权用户可以访问。
目录
- Caddy 简介
- 安装 Caddy
- 2.1 从官网下载二进制(通用方法)
- 2.2 使用包管理器安装(CentOS)
- 2.3 Windows 安装
- 生成密码哈希
- 编写 Caddyfile 配置文件
- 运行 Caddy
- 5.1 前台运行(测试)
- 5.2 后台运行
- 5.3 作为系统服务运行(生产环境)
- 防火墙设置(CentOS)
- 验证访问
- 常见问题与排查
1. Caddy 简介
Caddy 是一个用 Go 编写的强大、可扩展的 Web 服务器,以其自动 HTTPS、配置简单和默认安全而闻名。它无需复杂的配置即可快速提供静态文件服务、反向代理等。Caddy 的配置文件(Caddyfile)语法简洁,易于阅读和维护。
2. 安装 Caddy
2.1 从官网下载二进制(通用方法)
适用于任何 Linux 发行版(包括 CentOS)以及 Windows/macOS。
# 下载最新版 Caddy(Linux amd64)或者手动下载地址:https://caddyserver.com/downloadcurl -OL "https://caddyserver.com/api/download?os=linux&arch=amd64"mv caddy_linux_amd64 caddychmod +x caddysudo mv caddy /usr/local/bin/验证安装:

caddy version2.2 使用包管理器安装(CentOS)
Caddy 提供了官方 yum 仓库,方便通过包管理器安装和管理。
# 添加 Caddy 仓库sudo dnf install 'dnf-command(copr)'sudo dnf copr enable @caddy/caddysudo dnf install caddy安装后,Caddy 二进制位于 /usr/bin/caddy,并已配置 systemd 服务。
2.3 Windows 安装
从 Caddy 下载页面 选择 Windows 平台,下载可执行文件(例如 caddy_windows_amd64.exe)。将文件重命名为 caddy.exe 并放入一个目录(如 D:\caddy),然后将该目录添加到系统 PATH 环境变量,或直接在命令行中定位到该目录运行。
3. 生成密码哈希
Caddy 的 basicauth(或 basic_auth)指令需要 bcrypt 格式的密码哈希。使用 Caddy 自带的工具生成:
caddy hash-password根据提示输入密码,确认后终端会输出类似:
$2a$14$I6/8X8X8X8X8X8X8X8X8X8X8X8X8X8X8X8X8X8X8X8X8X8X8复制该哈希值,稍后将用于配置文件中。
4. 编写 Caddyfile 配置文件
创建一个名为 Caddyfile(无扩展名)的文件,内容如下:
:8080 { root * /path/to/your/folder # 请替换为实际要共享的文件夹绝对路径 file_server browse basic_auth { 用户名 $2a$14$... # 替换为第3步生成的密码哈希 }}说明:
- :8080:Caddy 将监听 8080 端口(可改为其他端口,如 :80),但不能是2019。
- root *:指定网站根目录,* 表示对所有路径生效。
- file_server browse:启用静态文件服务,并允许目录浏览(即访问文件夹时显示文件列表)。
- basic_auth:启用基本认证,大括号内每行定义一个用户,格式为 用户名 密码哈希。
注意:早期版本使用 basicauth,现在推荐使用 basic_auth(带下划线)。如果使用 basicauth 会收到弃用警告,但功能仍正常。
5. 运行 Caddy
5.1 前台运行(测试)
在 Caddyfile 所在目录执行:
caddy run此时 Caddy 在前台运行,日志直接输出到终端。按 Ctrl+C 可停止服务。适合测试配置是否正确。
5.2 后台运行
如果希望 Caddy 在后台运行,使用:
caddy start停止服务:
caddy stop5.3 作为系统服务运行(生产环境)
如果通过包管理器安装,Caddy 已经配置为 systemd 服务。您可以直接启动并设置开机自启。
sudo systemctl start caddysudo systemctl enable caddy默认情况下,systemd 服务会读取 /etc/caddy/Caddyfile。如果您使用自定义路径,需要编辑服务文件或通过 --config 参数指定。
若要重新加载配置(不中断服务):
sudo systemctl reload caddy# 或sudo caddy reload --config /etc/caddy/Caddyfile6. 防火墙设置(龙蜥操作系统 Anolis OS)
开放 Caddy 监听的端口(例如 8080),以便其他设备访问。
使用 firewalld(Anolis OS 7/8/9 默认)
# 开放 8080 端口(TCP)sudo firewall-cmd --permanent --add-port=8080/tcpsudo firewall-cmd --reload# 验证sudo firewall-cmd --list-ports使用 iptables(CentOS 6 或未使用 firewalld)
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPTsudo service iptables save # 保存规则注意:如果服务器在云上(如阿里云、AWS),还需在云控制台的安全组中开放对应端口。
7. 验证访问
在浏览器中输入 http://服务器IP:8080(或 http://localhost:8080 本地测试)。浏览器会弹出登录窗口,输入配置的用户名和密码后,即可看到指定文件夹的文件列表。
如果文件夹中没有 index.html 文件,并且 browse 选项已开启,页面会显示目录索引,允许点击进入子目录或下载文件。
登陆界面
文件浏览
8. 常见问题与排查
Q1: 浏览器显示“Hello 大家好 测试”而不是文件列表?
- 原因:指定目录下存在 index.html 文件,Caddy 优先返回该文件。
- 解决:删除或重命名 index.html,或将其移到其他位置。
Q2: 访问时提示 403 Forbidden?
- 原因:文件权限不足,或 Caddy 无权读取该目录。
- 解决:确保运行 Caddy 的用户(如 caddy 系统用户)对目录有读取权限:
sudo chown -R caddy:caddy /path/to/folder sudo chmod -R 755 /path/to/folderQ3: Caddy 启动失败,提示“address already in use”?
- 原因:端口被其他程序占用,或与 Caddy 管理 API 端口(默认为 2019)冲突。
- 解决:更换配置文件中的端口(如改为 :8081),或在全局配置中修改管理 API 地址:
- caddyfile
- { admin off # 禁用管理 API(仅当不需要动态配置时) }
Q4: 如何修改密码?
- 重新生成密码哈希,替换 Caddyfile 中的对应行,然后重载配置:caddy reload。
Q5: 如何仅保护特定子路径?
在 basic_auth 后加上路径,例如:
basic_auth /private/* { username $2a$14$...}Q6: Caddy 日志在哪里?
- 前台运行直接输出到终端。
- 作为 systemd 服务,日志可通过 journalctl -u caddy 查看。
- 也可以在 Caddyfile 中配置日志输出到文件:
- caddyfile
- log { output file /var/log/caddy/access.log }
通过以上步骤,您已经成功搭建了一个安全、轻量的文件浏览服务。Caddy 的自动 HTTPS 和简洁配置使其成为个人和小型团队共享文件的理想选择。
💻 配套实训环境与动手练习
本文涉及的相关技术指令、开发环境与工具链已内置在边学边练在线实验室中,无需繁琐安装配置,随时在浏览器中实践体验: