一个支持 Docker 部署的 Node.js 代理服务器,可以将客户端请求转发到指定的目标 URL。
- 简单易用:直接使用原始 URL,无需编码
- 安全可靠:内置安全头和错误处理
- Docker 支持:一键 Docker 部署
- 跨域支持:自动处理 CORS 问题
- 健康检查:内置服务状态监控
- 完整日志:记录所有请求和响应
- 部署服务:
chmod +x deploy.sh
./deploy.sh- 访问服务:
- 服务器地址:http://localhost:3000
- API 文档:http://localhost:3000/api
- 健康检查:http://localhost:3000/health
- 构建镜像:
docker-compose build- 启动服务:
docker-compose up -d- 查看日志:
docker-compose logs -f- 停止服务:
docker-compose down- 安装依赖:
npm install- 启动开发服务器:
npm run dev启动服务后,可以通过以下格式访问:
http://localhost:3000/proxy/[目标URL]
- 代理图片请求:
http://localhost:3000/proxy/https://raw.githubusercontent.com/hypooo/files/refs/heads/main/2025-07/gpt-1747038609316.png
- 代理 API 请求:
http://localhost:3000/proxy/https://api.github.com/users/octocat
- 代理网页内容:
http://localhost:3000/proxy/https://example.com
| 端点 | 方法 | 描述 |
|---|---|---|
/ |
GET | 服务信息 |
/api |
GET | API 使用文档 |
/health |
GET | 健康检查 |
/proxy/* |
GET | 代理请求入口 |
复制 .env.example 到 .env 并根据需要修改:
# 服务端口
PORT=3000
# 运行环境
NODE_ENV=production
# 日志级别
LOG_LEVEL=info
# 请求超时时间(毫秒)
REQUEST_TIMEOUT=30000
# 最大请求大小
MAX_REQUEST_SIZE=50mbdocker-compose.yml 中的主要配置:
- 端口映射:
3000:3000 - 重启策略:
unless-stopped - 健康检查:每30秒检查一次
- 网络隔离:使用独立的 bridge 网络
├── package.json # 项目依赖和脚本
├── server.js # 主服务器文件
├── Dockerfile # Docker 构建文件
├── docker-compose.yml # Docker Compose 配置
├── .dockerignore # Docker 忽略文件
├── .env.example # 环境变量示例
├── deploy.sh # 自动化部署脚本
└── README.md # 项目说明文档
- 代理中间件:使用
http-proxy-middleware处理请求转发 - 安全防护:使用
helmet设置安全头 - 跨域处理:使用
cors处理跨域请求 - 错误处理:全局异常捕获和响应
-
添加新的代理选项: 修改
server.js中的createProxyMiddleware配置 -
添加请求验证: 在代理前添加自定义验证逻辑
-
修改日志格式: 调整日志中间件的输出格式
-
端口冲突:
# 修改 docker-compose.yml 中的端口映射 ports: - "3001:3000" # 映射到 3001 端口
-
Docker 构建失败:
# 清理 Docker 缓存 docker system prune -a docker-compose build --no-cache -
代理请求失败:
- 检查目标 URL 是否可访问
- 查看服务器日志:
docker-compose logs web-proxy - 确认请求格式正确
# 查看容器状态
docker-compose ps
# 查看实时日志
docker-compose logs -f web-proxy
# 进入容器调试
docker-compose exec web-proxy sh
# 测试健康检查
curl http://localhost:3000/health- 仅代理信任的 URL:建议在生产环境中验证目标 URL
- 设置请求限制:根据需要配置请求大小和超时时间
- 监控访问日志:定期检查访问记录,及时发现异常
- 更新依赖包:定期更新 Node.js 依赖包以修复安全漏洞
MIT License - 详见 LICENSE 文件
欢迎提交 Issues 和 Pull Requests!
如果遇到问题,请通过以下方式联系:
- 查看项目文档
- 检查服务器日志
- 提交 Issue
Made with ❤️ by AI Assistant