一步一步教你怎么用Nginx设置代理访问ChatGPT接口
本文正在参加「金石计划」
1.前言
最近小伙伴一直在问我服务访问策略的问题。因为我们本地直接访问https://api.openai.com/
是受限的,那么为了能保证接口调用成功那么就需要通过代理进行访问。因为接口域名本身没有做地区限制,那么我们可以搭建一个香港代理,使其能够正常访问接口域名。
2.Nginx服务部署
2.1.下载nginx并解压
- 下载nginx nginx.org/en/download…,我这里下载的时1.23.3版本
- 将nginx解压到/usr/local/nginx目录
tar -xzvf nginx-1.23.3.tar.gz /usr/local/
- 修改nginx名称
cd /usr/local
mv nginx-1.23.3 nginx
2.2.安装SSL组件
因为我们访问的时https,故需要给nginx安装SSL模块,使其支持https的转发。
- 下载SSL依赖模块
yum -y install openssl openssl-devel make zlib zlib-devel gcc gcc-c++ libtool pcre pcre-devel
- nginx安装ssl
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
2.3. SSL证书生成
- 创建服务器证书密钥文件 server.key:
openssl genrsa -des3 -out server.key 2048
输入密码,确认密码,自己随便定义,但是要记住,后面会用到。
- 创建服务器证书的申请文件 server.csr
openssl req -new -key server.key -out server.csr
- 生成server-ca.crt,输入国家、省份等信息
openssl req -new -x509 -key server.key -out server-ca.crt -days 3650
按照提示一步一步输入信息:
Enter pass phrase for root.key: ← 输入前面创建的密码
Country Name (2 letter code) [AU]:CN ← 国家代号,中国输入CN
State or Province Name (full name) [Some-State]:BeiJing ← 省的全名,拼音
Locality Name (eg, city) []:BeiJing ← 市的全名,拼音
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany Corp. ← 公司英文名(随便写)
Organizational Unit Name (eg, section) []: ← 可以不输入
Common Name (eg, YOUR name) []: ← 输入域名,如:[iot.conet.com](<http://iot.conet.com/>)(随便写)
Email Address []:admin@mycompany.com ← 电子邮箱,可随意填(随便写)
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []: ← 可以不输入
An optional company name []: ← 可以不输入
- 备份一份服务器密钥文件
cp server.key [server.key.org](<http://server.key.org/>)
- 去除文件口令
openssl rsa -in [server.key.org](<http://server.key.org/>) -out server.key
- 生成证书文件server.crt
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
2.4.nginx配置
nginx配置主要有两个,一个是证书配置,一个是路由转发配置
修改nginx安装目录下的 /conf/nginx.conf,将以下配置复制进去。其中证书目录和监听端口按照自己的需要进行修改。
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" $http_host '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
keepalive_timeout 65;
server {
# 服务监听端口
listen 19999;
server_name ai;
# 证书配置,将刚才生成的证书路径配置进来
ssl_certificate /usr/local/nginx/ssl/server.crt;
ssl_certificate_key /usr/local/nginx/ssl/server.key;
proxy_ssl_server_name on;
proxy_ssl_session_reuse off;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# 代理配置,监听链接中如果有v1,那么就将请求转发到https://api.openai.com
location /v1/ {
proxy_pass <https://api.openai.com>;
}
}
}
路由转发这里我懒省事了下,因为openai的接口路径都带有v1,因此我就按照如果路径中存在v1则就直接转发到openai服务了。nginx也可以根据正则匹配。相关匹配规则可以参考如下:
- = 开头表示精确匹配; 如: 设置location = /v1/,那么就是路径只能等于v1,不然匹配不到
- ^~ 开头表示uri以某个常规字符串开头,不是正则匹配;
- ~ 开头表示区分大小写的正则匹配;
- ~* 开头表示不区分大小写的正则匹配;
- / 通用匹配, 如果没有其它匹配,任何请求都会匹配到;
2.5.nginx启动
进入nginx安装目录的sbin文件夹,执行./nginx
即可启动nginx服务,执行完毕可以执行
ps-ef | grep nginx
查看是否启动
2.6.测试nginx转发
本地进行转发测试,已经可以收到openai的请求了。
curl --include https://127.0.0.1:19999/v1/text
至此,ChatGpt代理的搭建就完成了,如果有问题可以随时关注我公众号:老王说技术或者评论进行交流哈。现在你可以通过本地调用代理服务的外网+端口进行openai接口的访问了,赶快行动吧。
上一篇: 在Linux上使用Nginx部署静态网页