Caddy 安装与反向代理配置

概述

本文介绍如何在 Debian/Kali Linux 系统上安装 Caddy 并配置反向代理,实现无域名纯 IP 访问本地服务。

安装 Caddy

安装步骤(Debian/Kali Linux 通用)

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

常规配置

sudo vim /etc/caddy/Caddyfile
:80 {
	handle_path /downloads/* {
		root * /var/www/downloads
		file_server browse
	}

	root * /var/www/html
	file_server
}

基础反向代理配置

目标:将 localhost:3000 代理到外部 IP 访问

无域名纯 IP 反代配置(HTTP only)

http://<你的IP> {
    reverse_proxy localhost:3000
}

注意:

  • 必须加 http:// 前缀,否则 Caddy 会尝试申请 HTTPS 证书,无域名时会失败
  • 替换 <你的IP> 为你实际的服务器 IP,比如 http://192.168.1.100

重启 Caddy 服务

sudo systemctl restart caddy

放行防火墙端口

sudo ufw allow 80

浏览器访问测试

http://<你的IP>/

使用非标准端口配置

如果不想使用 80 端口(如权限问题),可以配置其他端口:

http://<你的IP>:8080 {
    reverse_proxy localhost:3000
}

访问地址:

http://<你的IP>:8080

HTTPS 到 HTTP 反向代理配置

目标:将 OpenVAS (https://localhost:9392) 代理到局域网 HTTP 访问

推荐配置方案

http://192.168.1.100:8080 {
    reverse_proxy https://localhost:9392 {
        transport http {
            tls_insecure_skip_verify
        }
    }
}

配置说明:

  • http://192.168.1.100:8080:局域网设备通过 HTTP 访问
  • reverse_proxy https://localhost:9392:后端是 OpenVAS 的 HTTPS 服务
  • tls_insecure_skip_verify:跳过自签名证书验证(必须添加)

重启服务并放行端口

sudo systemctl restart caddy
sudo ufw allow 8080

访问测试

浏览器打开:

http://192.168.1.100:8080

配置对比

Caddy vs Nginx 特性对比

特性 Caddy Nginx
配置简洁性 ✅ 一行搞定 ❌ 多行配置
自动 HTTPS ✅(但无域名时不可用) ❌ 需手动配置
无域名 HTTP 反代 ✅ 支持 ✅ 支持

OpenVAS 代理配置总结

项目 说明
OpenVAS 默认地址 https://127.0.0.1:9392(自签名证书)
Caddy 反代 支持 HTTPS 后端,需加 tls_insecure_skip_verify
无域名访问 只能用 http://<IP>:端口 访问
局域网支持 ✅ 完全支持

故障排查

检查服务监听状态

ss -tulnp | grep 9392

检查 Caddy 服务状态

sudo systemctl status caddy
sudo journalctl -u caddy -f

注意事项

  1. 无域名配置:必须使用 http:// 前缀,避免 HTTPS 证书申请失败
  2. 端口选择:可以使用任何未被占用的端口
  3. 防火墙配置:确保相应端口在防火墙中放行
  4. 自签名证书:对于 HTTPS 后端服务,需要添加 tls_insecure_skip_verify 跳过证书验证