跳至主要內容

openai API 反向代理

大约 1 分钟

openai API 反向代理

安装nginx

sudo apt-get update
sudo apt-get install nginx

生成ssl证书

如果不需要 https,那么可以跳过这步

建议使用acme.sh

# 如果采用standalone,需要先安装socat以支持
apt install socat
# 安装
curl https://get.acme.sh | sh -s email=my@example.com
# 如果80端口空闲,则直接生成,记得替换mydomain.com
acme.sh --issue -d mydomain.com --standalone

它生成了几个文件,其中3个是证书文件,一个是证书密钥,fullchain包含了另外2个证书文件

对于nginx可以这样填

server {
    listen 443 ssl;
    server_name mydomain.com;

    ssl_certificate /root/.acme.sh/mydomain.com_ecc/fullchain.cer;
    ssl_certificate_key /root/.acme.sh/mydomain.com_ecc/mydomain.com.key;

  location / {
    proxy_pass https://localhost:5173;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    // 如果要支持wss
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

}
可以使用 certbot 获得免费的 SSL 证书
sudo apt install certbot

这个命令将列出所有的证书,包括其域名、到期日期、证书路径等信息。

certbot certificates

生成证书,有效期三个月,你可以在快到期时重新生成证书,记得替换域名

sudo systemctl stop nginx
certbot certonly --rsa-key-size 2048 --standalone --agree-tos -d yourdomainname.info
sudo systemctl start nginx

或者

certbot certonly --rsa-key-size 2048 --nginx --agree-tos -d yourdomainname.info

如果想在证书到期或者出现其它问题时接收通知,可以设置邮件地址--no-eff-email --email user@yourdomainname.info

GPT给出的参数说明
  • certonly:指示 Certbot 仅生成 SSL/TLS 证书,并不会自动安装或配置任何 Web 服务器软件。
  • --rsa-key-size 2048:指定证书的 RSA 密钥大小为 2048 位。较大的密钥通常更安全,但会对性能产生一定影响。
  • --standalone:指示 Certbot 使用独立模式进行验证。在这种模式下,Certbot 将启动自己的 Web 服务器以验证您的域名,并在验证完成后关闭该服务器。请注意,这意味着您的 Web 服务器必须在证书更新期间停止,以避免端口冲突。
    • 注:如果在使用 nginx,可以不使用--standalone,而使用--nginx来告诉 certbot 使用 nginx 插件
  • --agree-tos:指示您同意 Let's Encrypt 的服务条款。
  • --no-eff-email:指示您不希望接收来自 Let's Encrypt 的效率改进电子邮件。
  • --email user@yourdomainname.info:指定您的电子邮件地址,以便在证书到期或其他问题时接收通知。
  • -d yourdomainname.info:指定您要为其生成 SSL/TLS 证书的主要域名。如果您想要为多个域名生成证书,则可以在 -d 参数后列出这些域名,中间用空格分隔。

在网页上打开https://yourdomainname.info:8448应该能访问了

设置自动更新证书

首先

sudo certbot renew --nginx --dry-run
  • --nginx表示使用 nginx 插件进行更新
    • apt install python3-certbot-nginx

这将执行一个模拟运行,以确保在实际更新证书之前,一切都可以正常工作。

sudo crontab -e

在末尾添加以下行,这将在每天3:30检测证书是否可以更新,如果离过期不到30天,更新证书

30 3 * * * certbot renew --nginx --quiet --post-hook "systemctl reload nginx"
  • --quiet 参数使 Certbot 在执行时不产生任何输出
  • --post-hook 参数指定在成功更新证书后重新加载 Nginx。

配置

由GPT4生成大部分内容

创建一个新的Nginx配置文件,例如/etc/nginx/sites-available/openai-proxy

sudo nano /etc/nginx/sites-available/openai-proxy

在该文件中,粘贴以下配置内容,记得将yourdomain.com替换成服务器的域名:

没有域名可以用`_`代替,这将匹配任何请求

http
server {
    listen 80;
    server_name yourdomain.com;

    location / {
        proxy_pass https://api.openai.com;
        proxy_ssl_server_name on;
        proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    }
}

保存并关闭文件。

为配置文件创建一个符号链接,使其在sites-enabled目录中可用:

sudo ln -s /etc/nginx/sites-available/openai-proxy /etc/nginx/sites-enabled/

删除默认的Nginx配置文件链接:

sudo rm /etc/nginx/sites-enabled/default

为了确保没有配置错误,测试Nginx配置:

sudo nginx -t

如果测试成功,则重新加载Nginx配置:

sudo systemctl reload nginx

现在您的Nginx已经配置为将yourdomain.com的请求代理到api.openai.com。请确保您的域名DNS已正确指向Ubuntu服务器的IP地址。

如果您还没有为yourdomain.com配置SSL证书,建议使用Let's Encrypt的免费证书,以便启用HTTPS。您可以参考这个教程open in new window来配置Let's Encrypt。

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.0.0-alpha.10