欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

一步一步教你怎么用Nginx设置代理访问ChatGPT接口

最编程 2024-02-02 11:41:42
...

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

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.key 2048

输入密码,确认密码,自己随便定义,但是要记住,后面会用到。

  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 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 []: ← 可以不输入
  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 -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

查看是否启动

image.png

2.6.测试nginx转发

本地进行转发测试,已经可以收到openai的请求了。

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

image.png

至此,ChatGpt代理的搭建就完成了,如果有问题可以随时关注我公众号:老王说技术或者评论进行交流哈。现在你可以通过本地调用代理服务的外网+端口进行openai接口的访问了,赶快行动吧。