高性能、功能完整的CORS代理服务,支持多种部署方式和丰富的配置选项。专为需要跨域资源访问的Web应用设计,提供了安全、可靠的代理解决方案。
🌐 在线演示: cors.ciao.su
感谢 DreamCloud 提供的高防服务器支持,为本项目提供稳定可靠的演示环境。
- 🚀 高性能CORS代理:支持所有HTTP方法和内容类型,轻松解决跨域问题
- 🔒 安全防护:IP/域名黑白名单、恶意URL检测、请求验证
- ⚡ 智能限流:动态请求频率限制和并发控制,防止资源滥用
- 📊 实时监控:详细的请求统计、性能分析和状态监控
- 🎯 智能缓存:GET请求响应缓存,大幅提升性能和减少外部请求
- 📝 完整日志:支持控制台和Webhook日志,便于追踪和分析
- 🤖 智能伪装:优先转发真实User-Agent,自动添加浏览器标准头部,降低被识别为爬虫的风险
- 🔄 自动重试:智能重试机制,自动处理网络波动和临时错误,大幅提升请求成功率
- 黑白名单:支持IP和域名级别的访问控制,精确管理代理权限
- 频率限制:可配置的滑动窗口请求限制,自动防御恶意流量
- 并发控制:单IP和全局并发数限制,确保系统稳定
- 统计监控:可选的请求统计和性能监控,实时了解系统状态
- API管理:内置管理API,支持API密钥保护,安全管理系统
- Deno Deploy:一键部署到全球CDN网络,极速响应全球请求
- VPS部署:完整的一键安装和管理脚本,轻松管理自己的实例
- Docker容器:支持容器化部署,快速集成到现有基础设施
-
克隆项目
git clone https://github.com/bestZwei/ciao-cors.git cd ciao-cors
-
创建Deno Deploy项目
- 访问 Deno Deploy
- 创建新项目
- 选择"从GitHub部署",选择您的仓库和server.ts文件
-
配置环境变量
- 在Deno Deploy控制台中设置环境变量(可选)
- 可以配置API_KEY、限流参数、域名黑白名单等
-
开始使用
- 通过
https://your-project.deno.dev/example.com/api/endpoint
格式访问 - 第一个路径段是您要请求的目标域名和路径
- 通过
-
下载部署脚本
curl -fsSL https://raw.githubusercontent.com/bestZwei/ciao-cors/main/deploy.sh -o deploy.sh chmod +x deploy.sh
-
运行安装脚本
sudo ./deploy.sh
-
按照菜单提示操作
- 自动检测和安装Deno
- 配置服务参数(端口、API密钥等)
- 设置防火墙规则
- 创建系统服务
- 🔒 安全性: 脚本锁定机制防止并发执行,完整的权限检查
- 🌐 兼容性: 支持Ubuntu、Debian、CentOS、RHEL、Fedora等主流发行版
- 🔧 智能安装: 自动检测系统架构,支持x86_64和ARM64
- 📦 依赖管理: 自动安装必要依赖,智能包管理器检测
- 🛡️ 防火墙: 支持firewalld、ufw、iptables多种防火墙
- 📋 备份恢复: 自动备份配置和文件,支持一键恢复
- 🔄 更新维护: 内置脚本更新、服务更新、系统优化功能
- 📊 监控诊断: 健康检查、性能监控、日志分析
- 🎯 用户友好: 彩色输出、详细提示、错误处理
变量名 | 默认值 | 说明 |
---|---|---|
PORT |
3000 |
服务监听端口 |
RATE_LIMIT |
2500 |
每个时间窗口的最大请求数 |
RATE_LIMIT_WINDOW |
60000 |
限流时间窗口(毫秒) |
CONCURRENT_LIMIT |
10 |
单IP最大并发数 |
TOTAL_CONCURRENT_LIMIT |
1000 |
全局最大并发数 |
MAX_URL_LENGTH |
2048 |
最大URL长度 |
MAX_BODY_SIZE |
10485760 |
最大请求体大小(字节,默认10MB) |
TIMEOUT |
30000 |
请求超时时间(毫秒) |
ENABLE_STATS |
false |
是否启用统计功能 |
ENABLE_LOGGING |
true |
是否启用日志记录 |
API_KEY |
- | 管理API密钥(可选) |
LOG_WEBHOOK |
- | 日志Webhook URL(可选) |
ALLOWED_ORIGINS |
- | 允许的来源域名列表(JSON或逗号分隔) |
BLOCKED_IPS |
- | 禁止的IP地址列表(JSON或逗号分隔) |
BLOCKED_DOMAINS |
- | 禁止的域名列表(JSON或逗号分隔) |
ALLOWED_DOMAINS |
- | 允许的域名列表(JSON或逗号分隔) |
REQUIRE_HEADERS |
true |
是否强制要求Origin或X-Requested-With头部 |
基础配置
export PORT=3000
export RATE_LIMIT=100
export ENABLE_STATS=true
export API_KEY=your-secret-key
安全配置
export BLOCKED_IPS='["192.168.1.100", "10.0.0.5"]'
export ALLOWED_DOMAINS='["api.example.com", "data.example.org"]'
export BLOCKED_DOMAINS='["malicious.com", "spam.net"]'
export REQUIRE_HEADERS=true # 强制要求Origin或X-Requested-With头部
性能配置
export CONCURRENT_LIMIT=20
export TOTAL_CONCURRENT_LIMIT=2000
export TIMEOUT=60000
export RATE_LIMIT_WINDOW=30000
基本代理格式
https://your-domain.com/{target-url}
使用示例
# 代理GET请求(需要添加必需的头部)
curl -H "X-Requested-With: XMLHttpRequest" \
https://your-domain.com/httpbin.org/get
# 代理POST请求
curl -X POST https://your-domain.com/jsonplaceholder.typicode.com/posts \
-H "Content-Type: application/json" \
-H "X-Requested-With: XMLHttpRequest" \
-d '{"title": "test", "body": "content"}'
# 使用Origin头部(浏览器fetch会自动添加)
curl -H "Origin: https://your-app.com" \
"https://your-domain.com/api.github.com/users/octocat"
JavaScript fetch示例
// fetch会自动添加Origin头部,无需手动设置
fetch('https://your-domain.com/httpbin.org/get')
.then(response => response.json())
.then(data => console.log(data));
// 或者手动添加X-Requested-With头部
fetch('https://your-domain.com/httpbin.org/get', {
headers: {
'X-Requested-With': 'XMLHttpRequest'
}
})
.then(response => response.json())
.then(data => console.log(data));
需要设置API_KEY
环境变量才能访问管理API。
健康检查
GET /_api/health?key=your-api-key
查看统计信息
GET /_api/stats?key=your-api-key
查看性能数据
GET /_api/performance?key=your-api-key
查看配置信息
GET /_api/config?key=your-api-key
查看版本信息
GET /_api/version?key=your-api-key
重置统计数据
GET /_api/reset-stats?key=your-api-key
清理缓存
GET /_api/clear-cache?key=your-api-key
热重载配置
GET /_api/reload-config?key=your-api-key
使用Bearer Token
curl -H "Authorization: Bearer your-api-key" \
https://your-domain.com/_api/stats
-
强制设置API密钥
- 使用至少32位的复杂随机密钥
- 包含大小写字母、数字和特殊字符
- 定期轮换API密钥(建议每3-6个月)
- 示例生成强密钥:
openssl rand -base64 32
-
配置严格的访问控制
- 使用域名白名单限制可代理的目标
- 配置IP黑名单阻止恶意来源
- 设置来源白名单控制CORS访问
- 避免使用通配符(*)除非必要
-
实施多层限流保护
- 请求频率限制:防止单IP过度请求
- 并发连接限制:防止资源耗尽
- 请求体大小限制:防止大文件攻击
- 根据服务器性能调整参数
-
服务运行安全
- 使用专用非特权用户运行服务
- 启用systemd安全特性(已内置)
- 配置适当的文件权限(600用于配置文件)
- 定期检查服务运行状态
-
网络安全配置
- 配置防火墙只开放必要端口
- 使用HTTPS反向代理(推荐nginx/Apache)
- 考虑使用VPN或内网部署
- 监控异常网络连接
-
日志和监控
- 启用详细日志记录
- 配置日志轮转防止磁盘满
- 设置异常告警(可用Webhook)
- 定期分析访问模式
-
定期安全维护
- 及时更新系统和Deno运行时
- 使用管理脚本检查服务状态
- 定期备份配置文件
- 运行安全检查脚本
-
安全检查工具
# 运行安全配置检查 curl -fsSL https://raw.githubusercontent.com/bestZwei/ciao-cors/main/security-check.sh | sudo bash # 或下载后运行 wget https://raw.githubusercontent.com/bestZwei/ciao-cors/main/security-check.sh chmod +x security-check.sh sudo ./security-check.sh
- 永远不要在生产环境中禁用所有安全限制
- 永远不要使用弱密码或默认密钥
- 永远不要允许代理访问内网地址(已内置保护)
- 永远不要忽略异常的流量模式
- 定期检查是否有未授权的配置更改
- 小型站点:并发限制10,频率限制60/分钟
- 中型站点:并发限制50,频率限制300/分钟
- 大型站点:并发限制100,频率限制1000/分钟
-
增加缓存时间
- 对于不经常变化的内容,可以延长缓存TTL
- 添加自定义缓存控制头
-
调整并发限制
- 对于强CPU服务器,可以增加并发限制
- 监控系统负载,避免过载
-
使用VPS部署脚本的系统优化功能
- 优化系统限制(文件描述符、连接数)
- 调整网络参数提高吞吐量
- 添加SWAP空间(低内存服务器)
- 平均响应时间(目标:<500ms)
- 错误率(目标:<1%)
- 并发连接数
- 缓存命中率(目标:>70%)
Q: 脚本提示"网络连接失败"
# 检查网络连接
ping github.com
ping deno.land
# 检查DNS设置
cat /etc/resolv.conf
# 临时使用其他DNS
echo "nameserver 8.8.8.8" > /etc/resolv.conf
Q: 健康检查显示"端口未监听"但服务在运行
# 安装网络工具
sudo apt install net-tools iproute2 lsof # Ubuntu/Debian
sudo yum install net-tools iproute lsof # CentOS/RHEL
# 手动检查端口
sudo ss -tuln | grep :3000
sudo netstat -tuln | grep :3000
sudo lsof -i :3000
# 检查服务日志
sudo journalctl -u ciao-cors -f
Q: 性能监控显示"netstat: command not found"
# 现代Linux系统推荐使用ss命令
sudo apt install iproute2 # Ubuntu/Debian
sudo yum install iproute # CentOS/RHEL
# 或安装传统的net-tools
sudo apt install net-tools # Ubuntu/Debian
sudo yum install net-tools # CentOS/RHEL
Q: Deno安装失败
# 手动安装Deno
curl -fsSL https://deno.land/x/install/install.sh | sh
export PATH="$HOME/.deno/bin:$PATH"
sudo ln -sf $HOME/.deno/bin/deno /usr/local/bin/deno
# 验证安装
deno --version
Q: 防火墙配置失败
# 检查防火墙状态
sudo systemctl status firewalld
sudo systemctl status ufw
# 手动开放端口
sudo firewall-cmd --permanent --add-port=3000/tcp
sudo firewall-cmd --reload
# 或使用ufw
sudo ufw allow 3000/tcp
Q: 服务创建失败
# 检查systemd
sudo systemctl --version
# 手动重载systemd
sudo systemctl daemon-reload
# 检查服务文件
sudo systemctl cat ciao-cors
Q: 服务启动失败,提示端口被占用
# 检查端口占用
sudo netstat -tlnp | grep :3000
sudo lsof -i :3000
# 或使用其他端口
sudo ./deploy.sh # 选择修改配置 -> 端口号
Q: 请求被拒绝,提示Rate limit exceeded
# 调整限流配置
export RATE_LIMIT=200
export RATE_LIMIT_WINDOW=60000
Q: 代理请求超时
# 增加超时时间
export TIMEOUT=60000
Q: 统计数据不显示
# 检查统计功能是否启用
curl http://localhost:3000/_api/config?key=your-api-key
# 启用统计功能
export ENABLE_STATS=true
# 或修改配置文件
sudo sed -i 's/^ENABLE_STATS=.*/ENABLE_STATS=true/' /etc/ciao-cors/config.env
sudo systemctl restart ciao-cors
# 测试统计功能
curl https://raw.githubusercontent.com/bestZwei/ciao-cors/main/test-stats.sh | bash
Q: 客户端收到CORS错误
# 检查允许的来源设置
export ALLOWED_ORIGINS='["*"]'
# 或者指定特定域名
export ALLOWED_ORIGINS='["https://your-app.com"]'
Q: 收到"Missing required request header"错误
# 这是新的安全功能,需要添加必需的头部
# 方法1:在请求中添加X-Requested-With头部
curl -H "X-Requested-With: XMLHttpRequest" https://your-domain.com/target-url
# 方法2:在请求中添加Origin头部
curl -H "Origin: https://your-app.com" https://your-domain.com/target-url
# 方法3:如果需要禁用此功能(不推荐)
export REQUIRE_HEADERS=false
sudo systemctl restart ciao-cors
使用诊断脚本
# 下载诊断脚本
curl -fsSL https://raw.githubusercontent.com/bestZwei/ciao-cors/main/diagnose.sh -o diagnose.sh
chmod +x diagnose.sh
# 运行诊断
sudo ./diagnose.sh
诊断脚本会自动检查:
- 系统状态和资源
- 服务运行状态
- 配置文件有效性
- 网络连接和端口监听
- 错误日志分析
- 提供自动修复建议
查看实时日志
# systemd服务日志
sudo journalctl -f -u ciao-cors
# 或者直接运行
deno run --allow-net --allow-env server.ts
API调试
# 健康检查
curl http://localhost:3000/_api/health
# 测试代理
curl http://localhost:3000/httpbin.org/ip
# 性能数据
curl -H "Authorization: Bearer your-api-key" \
http://localhost:3000/_api/performance
CIAO-CORS 采用现代化的架构设计,确保高性能和可靠性:
- 运行时环境:使用Deno运行时,获得原生TypeScript支持和安全沙箱
- 无依赖设计:不依赖外部npm包,减少安全风险和部署复杂性
- 内存优化:智能缓存管理和资源清理,避免内存泄漏
- 并发控制:多级限流策略,确保系统稳定性
- 安全增强:全面的请求验证和过滤,防止恶意请求
MIT License - 详见 LICENSE 文件
欢迎提交Issue和Pull Request!
- Fork本项目
- 创建功能分支 (
git checkout -b feature/AmazingFeature
) - 提交更改 (
git commit -m 'Add some AmazingFeature'
) - 推送到分支 (
git push origin feature/AmazingFeature
) - 开启Pull Request
# 安装Deno
curl -fsSL https://deno.land/x/install/install.sh | sh
# 本地运行
deno run --allow-net --allow-env server.ts
# 类型检查
deno check server.ts
# 代码格式化
deno fmt server.ts
# 代码lint
deno lint server.ts
如果这个项目对你有帮助,请给个⭐️!
- GitHub Issues: https://github.com/bestZwei/ciao-cors/issues
- Email: post@zwei.de.eu.org
Made with ❤️ by bestZwei