最近 coding 的频率比较高,写了很多的web程序,但是他们都没有任何的密码保护.
网上搜到用 authlia 帖子比较多 , 但是我研究了一下,发现他非常复杂, 还需要借助npm(nginx proxy manager)等工具来实现代理转发。
我请教了一下 ai, 他说 caddy 支持反向代理和基本认证功能,可以很方便地给任何服务加一层密码防护,我用了一下感觉确实很方便。
下面的教程是关于如何使用 caddy 给一个本地的服务(http://localhost:3000) 加一层密码保护。
原理说明与本地测试
使用 caddy 制作一个密码哈希字符串,命令行输入:
.\caddy.exe hash-password --plaintext <YOURPASSWORD>
$2a$14$O27TM4SE4Z3CNYfzZE2FI.7Tk2hRuR1XM3R0hO4YAquBOYopQQiBK
在 Caddy 程序所在的目录下,新建一个文本文档,名字改叫 Caddyfile(不要有 .txt 后缀),内容如下:
#要的访问端口(http)
:9080 {
basic_auth {
# 账号是 admin,后面粘贴你刚才生成的加密字符串
admin $2a$14$O27TM4SE4Z3CNYfzZE2FI.7Tk2hRuR1XM3R0hO4YAquBOYopQQiBK
}
reverse_proxy localhost:3000
}
启动caddy
.\caddy run --config Caddyfile
http://127.0.0.1:9080/ 可以发现转发成功,且需要输入密码进入。
Caddy 完整版安装与配置手册
centos 版本
1. 下载并替换二进制文件
由于 yum 版功能不全,直接从官方拉取最新全功能版:
# 下载 64 位 Linux 官方包
curl -L "https://caddyserver.com/api/download?os=linux&arch=amd64" -o /usr/bin/caddy
# 授权
chmod +x /usr/bin/caddy
# 检查 basic_auth 模块是否完整
caddy list-modules | grep http.handlers.authentication
2. 创建极简配置文件
如果 /etc/caddy 目录不存在则先创建:mkdir -p /etc/caddy。
cat <<'EOF' > /etc/caddy/Caddyfile
:3001 {
# 账号 admin,密码用 caddy hash-password <your-password>生成
basic_auth * {
admin $2a$14$O27TM4SE4Z3CNYfzZE2FI.7Tk2hRuR1XM3R0hO4YAquBOYopQQiBK
}
# 反向代理到你的后端
reverse_proxy localhost:3000
}
EOF
可以添加多个,直接复制粘贴多搞几个就行了。
3. 配置 Systemd 系统服务
让 Caddy 支持后台运行、自启动和 systemctl 管理:
cat <<EOF > /etc/systemd/system/caddy.service
[Unit]
Description=Caddy Service
After=network.target
[Service]
Type=notify
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile --force
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
4. 启动并验证
# 加载并启动
systemctl daemon-reload
systemctl enable --now caddy
# 检查状态
systemctl status caddy
常用运维指令速查表
| 操作 | 命令 |
|---|---|
| 修改配置后生效 | caddy reload --config /etc/caddy/Caddyfile |
| 查看实时日志 | journalctl -u caddy -f |
| 生成新密码哈希 | caddy hash-password --plaintext "你的新密码" |
| 检查配置语法 | caddy validate --config /etc/caddy/Caddyfile |
效果展示

其他caddy用法
fileserver
caddy file-server --browse --listen :8080
界面比python的 http.server 好看很多,支持目录浏览和文件下载。

md阅读站
此方法可以极简启动一个支持markdown渲染的文件服务器,适合在本地快速浏览文档或者笔记。甚至可以当一个简单的博客。
其中包含两部分核心功能:
templates模块:它允许我们在响应中使用模板语法,动态生成 HTML 内容。我们利用这个功能来把 Markdown 文件渲染成 HTML。markdown函数:这是 Caddy 内置的一个函数,可以把 Markdown 文本转换成 HTML。我们在模板中调用它来渲染 Markdown 文件的内容。fileserver模块:提供静态文件服务和目录浏览功能。
#caddy run --config ./Caddyfile
:8080 {
root * .
encode zstd gzip
templates {
mime .md text/html
}
route {
@markdown {
path *.md
file
}
handle @markdown {
header Content-Type "text/html; charset=utf-8"
respond `
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/github-markdown-css/github-markdown.min.css">
<style>
body { background-color: #151515; margin: 1em; }
</style>
</head>
<body>
<div class="nav"><div class="nav-content"><a href="/">⬅</a></div></div>
<article class="markdown-body">
{{ include .Req.URL.Path | markdown }}
</article>
</body>
</html>
`
}
file_server browse
}
}

