自建VPS独享IP被ChatGPT封禁怎么办

之前,ChatGPT只在登录验证页面进行IP检测,但现在每次请求都会进行IP检测。我购买的阿里云新加坡独享IP和亚马逊美国区的独享IP都被封禁了。为了解决这个问题,我在Vultr上尝试了十几个区的IP,但都不可用。令人感到奇怪的是,即使使用ChatGPT Plus也无法幸免,因为封禁IP的策略完全不透明。

虽然我一直推荐的机场还能使用,但大量的人挤占可用IP,导致需要时不时刷新页面才能持续问答。

好在还有救,我在Github上找到了一个很棒的开源项目https://github.com/Yidadaa/ChatGPT-Next-Web/ ,可以私有化部署到自己的服务器,并稳定地使用ChatGPT售卖的API。当私有化部署完成后,它的效果如图所示。

转自: https://www.v2fy.com/p/2023-04-18-chatgpt-dev-1681812847000/

自建VPS独享IP被ChatGPT封禁怎么办

首先向ChatGPT获取token

进入  https://platform.openai.com/account/  注册账号登录成功后,为保证可以长期使用,建议绑定海外银行卡,我用的 depay , 目前ChatGPT连续三个月扣费很稳定,depay 邀请链接  https://depay.depay.one/web-app/register-h5?invitCode=620375&lang=zh-cn

IMG_2083

绑定银行卡,需要填写地址,填写地址的过程中,建议使用美国地址生成器,选择免税州,生成地址,阿拉斯加免税州生成链接  https://www.meiguodizhi.com/usa-address/alaska

免税州

在绑定银行卡界面提交时,要使用美国IP, 我是直接用的亚马逊云的Virginia美国服务器,亚马逊前三个月免费,等于白嫖, 详细开通教程我做了记录,可以前往  https://github.com/zhaoolee/pilog/wiki/Buy-Amazon-Lightsail-as-Raspberry-Pi-frp-server  查看

image-20230418183524818

绑定成功后,就可以在Billing 的Payment methods中查看到支付方式了 https://platform.openai.com/account/billing/payment-methods ,以后只要保证这张卡有余额,就能一直稳定使用ChatGPT了

添加成功

通过USER -> API keys 获取token , token为 sk开头

image-20230418184835460

搭建chatgpt-next-web私有化服务

如果你恰好有一台新加坡服务器(也可以直接买 https://common-buy.aliyun.com/?commodityCode=swas&regionId=ap-southeast-1 ),而这台服务器的3000端口也恰好空着,你只需一行命令,就能直接用Docker 运行私有化服务

docker run -d -p 3000:3000 \
   -e OPENAI_API_KEY="sk-xxxx" \
   -e CODE="页面访问密码" \
   yidadaa/chatgpt-next-web

私有化服务在服务器3000端口运行成功后,打开设置

打开设置

输入docker运行时的访问密码,关闭设置即可自动生效

输入访问密码-自动生效

如果你想在国内服务器部署,并添加https,请继续往下看

国内服务器是无法直接访问海外OpenAi 服务器的,我的方案是在阿里云7890端口配置代理,详细方案可参考 如何让国内的阿里云服务器可以高速下载Github代码 https://www.v2fy.com/p/2021-06-06-clash-wordpress-1622973106000/

但 如何让国内的阿里云服务器可以高速下载Github代码 里面自建的方案有些过时了,更新的自建方案在这里 通过新加坡阿里云访问ChatGPT https://www.v2fy.com/p/2023-03-01-v2ray-1677654246000/ , 另外,狡兔三窟,我验证vultr大量被ban的ip时,发现了这个脚本 source <(curl -sL https://multi.netlify.app/v2ray.sh) --zh 一键安装,很爽,甚至支持多用户,来源教程 https://iyideng.net/black-technology/cgfw/vmess-v2ray-server-building-and-using-tutorial.html

如何验证国内阿里云的某个端口已成功配置代理

我们可以用一次性docker容器来验证,docker容器是否可以通过某个端口的代理访问外网

docker run -it --rm --network host curlimages/curl curl -x http://172.17.0.1:7890 https://www.youtube.com

代理

这里为什么是172.17.0.1 , 而不是127.0.0.1 ? 因为对于Docker容器而言,127.0.0.1 会指向自己,而不是物理机;

这里的172.17.0.1 是怎么来的? 我是通过ifconfig | grep inet 获得的

ifconfig

此刻,我们已经验证,对于docker容器,可以通过配置代理 172.17.0.1:7890 顺利访问外网

其实我这里并不严谨,能顺利访问youtube.com 并不代表能顺利访问openai的服务器,但openai的api服务器好像并没有做ip的限制,因为我的新加坡阿里云服务器无法访问ChatGPT的网页服务(即使我交了20美刀每月的会员),但新加坡阿里云能顺利访问openai的api服务器,或许openai没有对开发者token请求的来源做限制(枪口抬高了一寸)

然后我们在国内服务器物理机3008端口(端口自己定,不和其他服务起冲突就好)起一个服务

docker run -d -p 3008:3000 \
-e OPENAI_API_KEY="sk-****" \
-e CODE="*****" \
-e PROXY_URL="http://172.17.0.1:7890" \
yidadaa/chatgpt-next-web

此刻我们的国内服务器就可以通过3008端口对外提供服务了。

将3008端口的服务,通过nginx,映射到一个独立域名,并添加https

重复的内容我就不写了,可以参考这篇文章

零依赖!使用acme.sh设置nginx多个https证书自动更新,无限续期https证书 https://www.v2fy.com/p/2021-06-27-nginx-https-1624774964000/

另外,还有一些nginx配置的细节,全在配置文件里,我直接把配置文件贴出来, 我的域名是 chat.v2fy.com 配置文件的位置为

 /etc/nginx/conf.d/chat.v2fy.com.conf

配置文件chat.v2fy.com.conf的内容为

server {
    listen 80;
    server_name chat.v2fy.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name chat.v2fy.com;

    ssl_certificate "/etc/nginx/ssl/chat.v2fy.com/fullchain.cer";
    ssl_certificate_key "/etc/nginx/ssl/chat.v2fy.com/chat.v2fy.com.key";

    location / {
        proxy_pass http://127.0.0.1:3008/;
        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_cache off;
        proxy_buffering off;
        chunked_transfer_encoding on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 300;
    }
}

大家可以根据自己的域名进行替换~

小结

ChatGPT 本身是很优秀的产品,作为一个程序员,ChatGPT为我省了大量时间,但ChatGPT近期的操作,显然不想给免费用户太多使用量,早点转为买token 进行私有化部署,或许是少折腾的最优解。

server {
    listen 80;
    server_name chat.v2fy.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name chat.v2fy.com;

    ssl_certificate "/etc/nginx/ssl/chat.v2fy.com/fullchain.cer";
    ssl_certificate_key "/etc/nginx/ssl/chat.v2fy.com/chat.v2fy.com.key";

    location / {
        proxy_pass http://127.0.0.1:3008/;
        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_cache off;
        proxy_buffering off;
        chunked_transfer_encoding on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 300;
    }
}

大家可以根据自己的域名进行替换~

小结

ChatGPT 本身是很优秀的产品,作为一个程序员,ChatGPT为我省了大量时间,但ChatGPT近期的操作,显然不想给免费用户太多使用量,早点转为买token 进行私有化部署,或许是少折腾的最优解。