本文正在参与「金石计划」

1.前言

最近小伙伴一直在问我服务拜访策略的问题。由于我们本地直接拜访https://api.openai.com/ 是受限的,那么为了能确保接口调用成功那么就需要通过署理进行拜访。由于接口域名自身没有做区域限制,那么我们能够建立一个香港署理,使其能够正常拜访接口域名。

2.Nginx服务部署

2.1.下载nginx并解压

  1. 下载nginx nginx.org/en/download…,我这儿下载的时1.23.3版别
  2. 将nginx解压到/usr/local/nginx目录
tar -xzvf nginx-1.23.3.tar.gz  /usr/local/
  1. 修正nginx名称
cd /usr/local
mv nginx-1.23.3 nginx

2.2.装置SSL组件

由于我们拜访的时https,故需要给nginx装置SSL模块,使其支持https的转发。

  1. 下载SSL依靠模块
yum -y install openssl openssl-devel make zlib zlib-devel gcc gcc-c++ libtool pcre pcre-devel
  1. nginx装置ssl
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

2.3. SSL证书生成

  1. 创立服务器证书密钥文件 server.key:

openssl genrsa -des3 -out server.key2048

输入暗码,确认暗码,自己随意定义,可是要记住,后边会用到。

  1. 创立服务器证书的恳求文件 server.csr

openssl req -new-key server.key -out server.csr

  1. 生成server-ca.crt,输入国家、省份等信息

openssl req -new -x509 -key server.key -out server-ca.crt -days 3650

依照提示一步一步输入信息:

Enter pass phraseforroot.key: ← 输入前面创立的暗码
Country Name (2letter 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 []: ← 能够不输入
  1. 备份一份服务器密钥文件

cp server.key [server.key.org](<http://server.key.org/>)

  1. 去除文件口令

openssl rsa -in [server.key.org](<http://server.key.org/>) -out server.key

  1. 生成证书文件server.crt

openssl x509 -req -days365-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

查看是否发动

手把手教你如何使用nginx配置代理访问ChatGpt接口

2.6.测验nginx转发

本地进行转发测验,已经能够收到openai的恳求了。

curl --include https://127.0.0.1:19999/v1/text

手把手教你如何使用nginx配置代理访问ChatGpt接口

至此,ChatGpt署理的建立就完成了,如果有问题能够随时关注我公众号:老王说技术或者评论进行沟通哈。现在你能够通过本地调用署理服务的外网+端口进行openai接口的拜访了,从速举动吧。