共计 2802 个字符,预计需要花费 8 分钟才能阅读完成。
背景与痛点
最近在项目中整合 ChatGPT API 时,遇到了几个棘手的问题。直接调用官方 API 在高并发场景下表现不佳,主要体现在以下几个方面:

- 速率限制 :OpenAI 对 API 调用有严格的速率限制,单个 API 密钥每分钟只能处理有限数量的请求
- 高延迟 :由于服务器位于海外,国内直接调用延迟经常超过 1 秒
- 安全隐患 :前端直接暴露 API 密钥存在泄露风险
- 不稳定连接 :偶尔出现连接中断需要重试的情况
技术选型
在评估了几种主流代理方案后,最终选择了 Nginx 作为解决方案,主要原因如下:
- 性能对比 :
- Nginx:轻量级,事件驱动架构,适合高并发
- HAProxy:功能全面但配置复杂
-
Traefik:动态配置友好但资源消耗较高
-
功能优势 :
- 内置负载均衡
- 灵活的缓存策略
- 成熟的限流模块
- 丰富的安全特性
核心实现
基础代理配置
以下是一个基础的 Nginx 配置示例,实现了 SSL 终止和请求转发:
# /etc/nginx/nginx.conf
http {
upstream chatgpt_backend {
server api.openai.com:443;
keepalive 32; # 维持长连接
}
server {
listen 443 ssl http2;
server_name chatgpt.yourdomain.com;
# TLS 配置
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
location /v1/chat/completions {
proxy_pass https://chatgpt_backend;
proxy_set_header Host api.openai.com;
proxy_set_header Authorization "Bearer $api_key";
# 连接超时设置
proxy_connect_timeout 5s;
proxy_read_timeout 60s;
# 启用 HTTP/2
proxy_http_version 1.1;
}
}
}
缓存策略实现
针对 ChatGPT 的响应内容,我们实现了 LRU 缓存策略:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=chatgpt_cache:10m
inactive=60m use_temp_path=off max_size=1g;
server {
# ... 其他配置...
location /v1/chat/completions {
proxy_cache chatgpt_cache;
proxy_cache_key "$scheme$request_method$host$request_uri$http_authorization";
proxy_cache_valid 200 5m; # 成功响应缓存 5 分钟
proxy_cache_use_stale error timeout updating;
add_header X-Cache-Status $upstream_cache_status;
}
}
限流配置
使用漏桶算法实现 API 限流:
limit_req_zone $binary_remote_addr zone=chatgpt_limit:10m rate=30r/m;
server {
# ... 其他配置...
location /v1/chat/completions {
limit_req zone=chatgpt_limit burst=5 nodelay;
limit_req_status 429;
}
}
性能优化
压力测试
使用 wrk 进行基准测试:
- 安装 wrk 测试工具
- 执行测试命令:
wrk -t4 -c100 -d60s --latency https://chatgpt.yourdomain.com/v1/chat/completions
测试结果显示,经过优化后的代理服务:
- 平均延迟从 1200ms 降至 350ms
- 吞吐量提升 3 倍
- 错误率从 15% 降至 0.5%
连接调优
关键参数调整:
# 调整系统级连接数限制
worker_processes auto;
events {
worker_connections 4096;
multi_accept on;
}
http {
# 启用 TCP 优化
tcp_nopush on;
tcp_nodelay on;
# 调整缓冲区大小
proxy_buffers 16 32k;
proxy_buffer_size 64k;
}
安全实践
JWT 验证
集成 JWT 验证保护 API 端点:
location /v1/chat/completions {
auth_jwt "ChatGPT API";
auth_jwt_key_file /etc/nginx/jwt_key.jwk;
# 其他代理配置...
}
敏感信息过滤
防止 API 密钥泄露:
location /v1/chat/completions {
proxy_set_header Authorization "Bearer $api_key";
proxy_hide_header Authorization;
# 过滤敏感响应头
proxy_hide_header X-API-Version;
}
DDoS 防护
基础防护配置:
# 限制单一 IP 连接数
limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
limit_conn conn_limit_per_ip 20;
# 屏蔽异常 User-Agent
map $http_user_agent $blocked_ua {
default 0;
~*(wget|curl|python|java) 1;
}
server {if ($blocked_ua) {return 403;}
}
避坑指南
- 连接泄漏问题 :
- 现象:Nginx 出现大量 TIME_WAIT 连接
-
解决:确保正确配置 keepalive 和 proxy_http_version
-
缓存失效 :
- 现象:相同请求返回不同结果
-
解决:检查 proxy_cache_key 是否包含所有必要参数
-
限流不生效 :
- 现象:limit_req 规则被绕过
-
解决:确认 $binary_remote_addr 能正确获取客户端 IP
-
SSL 握手慢 :
- 现象:首次连接延迟高
-
解决:启用 TLS session tickets 和 OCSP stapling
-
内存溢出 :
- 现象:Nginx 频繁崩溃
- 解决:调整 proxy_buffer_size 和 proxy_buffers 大小
总结与扩展
通过这套 Nginx 代理方案,我们成功解决了 ChatGPT API 的高并发访问问题。在实际生产环境中,建议进一步考虑:
- 集成 Prometheus 监控 Nginx 指标
- 实现基于 Kubernetes 的自动扩缩容
- 添加请求内容审计日志
- 考虑多地域部署降低延迟
这套方案不仅适用于 ChatGPT,也可以灵活适配其他 AI 服务 API。希望这些实践经验对您有所帮助,欢迎在评论区分享您的优化建议。
