openai API 反向代理
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 插件
- 注:如果在使用 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
替换成服务器的域名:
没有域名可以用`_`代替,这将匹配任何请求
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;
}
}
server {
listen 80;
server_name yourdomain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
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。您可以参考这个教程来配置Let's Encrypt。