手把手教你用 Caddy 2 搭建 AI API 中转服务

前言

由于网络原因,国内直接访问 OpenAI、Google Gemini、Claude 等 AI 服务的 API 往往不太稳定。本文介绍一种简单高效的解决方案——使用 Caddy 2 在美国服务器上搭建 API 中转服务。

相比 Nginx,Caddy 2 配置更简洁,且自动处理 HTTPS 证书,非常适合个人使用。

为什么要自己搭建?

市面上已有不少第三方中转服务,但自己搭建有以下优势:

  • 隐私安全:API Key 不经过第三方
  • 成本可控:没有额外的中转费用
  • 稳定可靠:服务器在自己掌控中
  • 学习价值:了解反向代理的工作原理

准备工作

  • 一台美国 VPS(推荐 Ubuntu 22.04)
  • 一个域名(任意域名均可)
  • 域名解析到 VPS(添加 A 记录)

安装 Caddy 2

Caddy 2 是一个现代化的 Web 服务器,配置简单,功能强大。

# 添加 Caddy 官方源
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

# 安装 Caddy
sudo apt update && sudo apt install caddy

配置中转服务

创建 Caddyfile 配置文件:

sudo tee /etc/caddy/Caddyfile << 'EOF'
your-domain.com {
	# 可选:启用访问日志
	log {
		output file /var/log/caddy/access.log {
			roll_size 10MB
			roll_keep 5
		}
	}

	# OpenAI API
	handle_path /openai/* {
		reverse_proxy https://api.openai.com {
			header_up -X-Forwarded-For
			header_up -X-Forwarded-Proto
			header_up -X-Forwarded-Host
			header_up -X-Forwarded-Port
			header_up -Accept-Language
			header_up Host api.openai.com
		}
	}

	# Google Gemini API
	handle_path /gemini/* {
		reverse_proxy https://generativelanguage.googleapis.com {
			header_up -X-Forwarded-For
			header_up -X-Forwarded-Proto
			header_up -X-Forwarded-Host
			header_up -X-Forwarded-Port
			header_up -Accept-Language
			header_up Host generativelanguage.googleapis.com
		}
	}

	# Anthropic Claude API
	handle_path /claude/* {
		reverse_proxy https://api.anthropic.com {
			header_up -X-Forwarded-For
			header_up -X-Forwarded-Proto
			header_up -X-Forwarded-Host
			header_up -X-Forwarded-Port
			header_up -Accept-Language
			header_up Host api.anthropic.com
		}
	}
}
EOF

记得将 your-domain.com 替换为你的实际域名。

启动服务

# 创建日志目录
sudo mkdir -p /var/log/caddy

# 验证配置是否正确
sudo caddy validate --config /etc/caddy/Caddyfile

# 重载 Caddy 配置
sudo systemctl reload caddy

# 设置开机自启
sudo systemctl enable caddy

如果一切正常,Caddy 会自动申请 HTTPS 证书并启动服务。

配置解析

路径映射

  • /openai/* → OpenAI 官方 API
  • /gemini/* → Google Gemini API
  • /claude/* → Anthropic Claude API

头部清理

配置中删除了以下头部,降低被风控的风险:

  • X-Forwarded-For:会暴露真实 IP
  • X-Forwarded-*:暴露代理痕迹
  • Accept-Language:可能暴露位置

User-Agent 默认透传,无需额外配置。

测试验证

测试 OpenAI

curl https://your-domain.com/openai/v1/chat/completions \
  -H "Authorization: Bearer sk-your-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o-mini",
    "messages": [{"role": "user", "content": "Hello"}]
  }'

测试 Gemini

curl "https://your-domain.com/gemini/v1beta/models/gemini-1.5-flash:generateContent?key=YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"contents": [{"parts": [{"text": "Hello"}]}]}'

测试 Claude

curl https://your-domain.com/claude/v1/messages \
  -H "x-api-key: your-key" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-3-opus-20240229",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Hello"}]
  }'

客户端配置

在 ChatGPT 客户端、Claude 客户端或其他 AI 工具中,修改 API Base URL:

服务商原地址替换为
OpenAIhttps://api.openai.comhttps://your-domain.com/openai
Geminihttps://generativelanguage.googleapis.comhttps://your-domain.com/gemini
Claudehttps://api.anthropic.comhttps://your-domain.com/claude

API Key 使用官方的 Key 即可。

查看日志

# 实时查看 Caddy 日志
sudo journalctl -u caddy -f

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

按 Ctrl + C 退出日志查看。

常见问题

Q: 为什么访问返回 502?

检查服务器是否能正常访问官方 API:

curl https://api.openai.com/v1/models -H "Authorization: Bearer sk-your-key"

Q: 证书申请失败?

确保域名已正确解析到服务器 IP,且 80/443 端口开放。

Q: 是否需要清理 X-Real-IP?

Caddy 默认不会添加这个头部,无需处理。

Q: 流式输出支持吗?

完全支持,所有 API 功能与原官方一致。

安全建议

  1. 个人使用:当前配置已足够安全
  2. 对外分享:建议添加 Basic Auth 或限制访问 IP
  3. 定期检查:查看日志发现异常请求

结语

通过 Caddy 2 搭建 AI API 中转服务,配置简洁,维护成本低,非常适合个人用户。相比使用第三方中转,自己的服务器更加稳定可靠。

如果你有任何问题,欢迎在评论区留言交流。


延伸阅读

标签:Caddy, OpenAI, Gemini, Claude, API代理, 反向代理, 教程