openai的跨域转发教程

openai的跨域转发教程

文章目录

前言

这个帖子主要是记录一下操作步骤,要不然时间久了我根本记不住,又得重新问gpt。

主要是有些主机的IP无法直接访问openai,或者其他模型的api,官方默认的url被他们禁的死死的,所以需要一个中转的IP。

为此,我特意整了一个便宜的中转服务器。

以openai的base_url为例:https://api.openai.com/v1/chat/completions

好了,我们现在有一个能访问openai的中转服务器A,公网IP为122.122.122.122,有一个本地服务器B,还需要一个域名,假设是abc.com

这时候要配置的步骤还是比较复杂的,一条一条的梳理。

1.中转服务器的配置:

  1. 开启对外端口,假设是2222;
    这个需要在你的服务器管理后台设定,tcp的端口,至于防火墙啥的,我不太记得了。

  2. 域名的转发。
    你需要将自己的域名abc.com的请求,转接到api.openai.com中,并且还要处理跨域的问题。
    假设你的域名托管在cloudflare中,这时候需要你在DNS中,设定一个A标签,假设是openai,然后IP地址设置为中转服务器的公网IP,122.122.122.122。 Proxy status不选择。至于有没有风险我还不太清楚,主要是这条路我走通了。

  3. Caddy反代
    第二步已经将openai.abc.com的请求配置到了IP122.122.122.122的IP了。现在需要将本地的端口对接到这个这个域名。我们可以选择免费的caddy反代,可以自动配置免费的ssl证书,非常舒服。
    操作步骤也有几步:

  4. 创建caddy文件夹。并且进入目录。

  5. vim docker-compose.yml
    填入:

    services:
    caddy:
    image: caddy:alpine
    container_name: caddy
    ports:
    - 80:80
    - 443:443
    volumes:
    - ./Caddyfile:/etc/caddy/Caddyfile
    - ./data:/data/caddy
    user: "1000"
    restart: always
    environment:
    TZ: Asia/Shanghai
    networks:
    default:
    external: true
    name: net

  6. 创建docker的桥接网络:docker network create net

  7. vim Caddyfile

    填入:

    openai.abc.com {
    encode gzip
    reverse_proxy 122.122.122.122:2222
    }

  8. 启动caddy的docker:docker compose up --force-recreate --build -d

配置转发

接下来要配置具体的跨域转发。

  1. 安装Node.js

    确保你的开发环境中已经安装了Node.js。如果还没有安装,你可以从Node.js官网下载并安装它。我系统是Ubuntu22.04.3,node.js安装的是v12.22.9。

  2. 创建项目目录:
    mkdir proxy-server
    cd proxy-server

  3. 初始化Node.js项目

    在项目目录中,运行以下命令来初始化一个新的Node.js项目并创建package.json文件:
    npm init -y

  4. 安装依赖

    你需要安装express和http-proxy-middleware。使用以下命令安装这些依赖。
    npm install express http-proxy-middleware

  5. 创建server.js文件

    打开server.js文件并添加以下代码:

bash 复制代码
const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');

// 创建Express应用
const app = express();

// 定义代理中间件选项
const proxyOptions = {
  target: 'https://api.openai.com', // 目标主机
  changeOrigin: true, // 需要虚拟主机站点
};

// 使用中间件将特定请求转发到目标API
app.use('/api', createProxyMiddleware(proxyOptions));

// 设置端口
const PORT = process.env.PORT || 2222;

// 启动服务器
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});
  1. 运行服务
    使用以下命令启动你的服务:
    node server.js
    如果是在后台启动的话,可以用:
    nohup node server.js >> output.log 2>&1 &

调用:

这时候只需要将openai的base_url(https://api.openai.com/v1/chat/completions)替换成你的url就行了:

bash 复制代码
# openai.base_url = 'https://api.openai.com/v1/chat/completions'
openai.base_url = 'https://openai.abc.com/v1/chat/completions'

完美,也许帮不到大家,但我自己做了一个比较完整的记录。

相关推荐
win4r2 小时前
RSI真的临近了吗?AI开始改进AI,但“智能爆炸”还差关键一跳
aigc·openai·ai编程
FungLeo6 小时前
成为全栈·Node 后端篇·点赞系统:幂等点赞与计数原子增减
node.js·成为全栈·点赞系统·幂等点赞·计数原子增减
AIGC大时代7 小时前
OpenAI Agents SDK 工程笔记:streaming 流式输出与生产禁区
openai·streaming·生产禁区·run_streamed·streamevent
故作春风8 小时前
elpis-core 核心从入门到理解
后端·架构·node.js
万敏8 小时前
Vue3 全栈实战第九周:Node.js + Express 后端从零搭建实战记录
vue.js·node.js·全栈
技灵AI10 小时前
ChatGPT Images 2.5 深度解读:延迟减半、Sketch 草图与 Flare/Sunburst 双模型 API
人工智能·gpt·aigc·音视频·images2.5
爱吃红星柚13 小时前
【学习】Elpis 抽离与发布 npm 包
前端·前端框架·node.js
Momo__14 小时前
AI 该不该"踩刹车"?三大巨头为何一边狂奔一边喊停
aigc·openai·ai编程
梦帮科技14 小时前
Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层
css·数据结构·链表·正则表达式·node.js·json·html5
梦帮科技15 小时前
从 Guest 到 Platinum:Prompt 配额、API Key 与访问控制的安全闭环
javascript·git·架构·node.js·reactjs·html5·visual studio