在国内环境中,由于网络限制,Next.js后端无法直接访问Google Gemini API。即使配置了VPN或在命令行中设置了代理环境变量,Node.js的fetch和Genkit SDK也不会自动使用系统代理。
项目已集成代理支持,你只需要配置环境变量即可。
依赖已经安装完成:
npm install https-proxy-agent undici在项目根目录创建 .env.local 文件(如果不存在),添加以下配置:
# Gemini API 密钥
GEMINI_API_KEY=your_gemini_api_key_here
# 代理配置 - 选择以下任一方式
HTTP_PROXY=http://127.0.0.1:7890
# 或
HTTPS_PROXY=http://127.0.0.1:7890
# 或
ALL_PROXY=http://127.0.0.1:7890常见代理端口:
- Clash:
7890 - V2rayN:
10809 - Shadowsocks:
1080
如果代理需要认证:
HTTP_PROXY=http://username:password@127.0.0.1:7890正常启动即可,无需额外配置:
npm run dev启动后你会在控制台看到代理状态日志:
[Proxy] Using proxy: http://127.0.0.1:****
[Genkit Proxy] Using proxy: http://127.0.0.1:****
代理配置的优先级:
HTTPS_PROXY- HTTPS请求专用代理(优先级最高)HTTP_PROXY- HTTP请求专用代理ALL_PROXY- 统一代理配置(优先级最低)
可以在后端代码中使用测试函数验证代理是否工作:
import { testProxyConnection } from '@/lib/proxy-fetch';
const result = await testProxyConnection();
console.log(result);
// 输出: { success: true, message: 'Proxy connection successful', proxy: 'http://127.0.0.1:7890' }import { getProxyFetch } from '@/lib/proxy-fetch';
const proxyFetch = getProxyFetch();
const response = await proxyFetch('https://api.example.com/data');Genkit插件会自动使用配置的代理:
import { HttpsProxyAgent } from 'https-proxy-agent';
const proxyUrl = process.env.HTTP_PROXY;
const agent = new HttpsProxyAgent(proxyUrl);
googleAI({
fetchOptions: { dispatcher: agent }
})检查项:
- 确认代理软件正在运行
- 确认代理端口号正确(查看代理软件设置)
- 确认代理开启了"允许来自局域网的连接"
- 检查
.env.local文件是否在项目根目录 - 重启Next.js开发服务器
Node.js环境与浏览器不同,不会自动使用系统代理。必须通过环境变量显式配置。
需要。即使VPN开启全局模式,Node.js也不会自动使用。必须配置环境变量。
可以,但不推荐:
Windows PowerShell:
$env:HTTP_PROXY="http://127.0.0.1:7890"; npm run devWindows CMD:
set HTTP_PROXY=http://127.0.0.1:7890 && npm run devLinux/Mac:
HTTP_PROXY=http://127.0.0.1:7890 npm run dev推荐使用.env.local文件配置,更加持久和方便。
在服务器的环境变量中设置:
# 编辑 ~/.bashrc 或 ~/.zshrc
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
# 或在系统服务配置中设置
# /etc/systemd/system/yourapp.service
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"不会。如果不配置HTTP_PROXY环境变量,代码会自动使用直连模式,不会有任何影响。
- 不要提交
.env.local到Git仓库(已在.gitignore中) - 如果代理需要认证,密码会在日志中被隐藏(显示为
****) - 生产环境建议使用更安全的密钥管理方案
如果配置成功,你应该能看到:
- ✅ 控制台显示代理日志
- ✅ AI模型列表正常加载
- ✅ Genkit相关功能正常工作
- ✅ 不再出现
Connect Timeout Error
如果仍有问题,请检查代理软件日志,确认连接请求是否到达代理服务器。