xqdoo00o / chatgpt-web

Pure Javascript ChatGPT demo based on OpenAI API
https://xqdoo00o.github.io/chatgpt-web/
MIT License
983 stars 369 forks source link

在Linux服务器上运行,发送对话提示“无权使用此模型,请打开设置选择其他GPT模型!“ #23

Closed Miles629 closed 1 year ago

Miles629 commented 1 year ago

问题描述: 在香港linux服务器上配置,希望可以达到不通过魔法也能够使用的网页,并且设置了网页认证。但是遇到了错误“无权使用此模型,请打开设置选择其他GPT模型!“

我的操作: 将repo的index网页上传到服务器nginx对应的html目录下。通过example.com(域名)可以正常访问。 在example.com网页右边的接口那里从‘https://api.openai.com/‘改为’https://example.com/v1‘以使用nginx反向代理的接口。 发送对话后提示“无权使用此模型,请打开设置选择其他GPT模型!“

最后还有个小问题:这样配置不是任何人访问这个https://example.com/v1都可以使用我的key?那第一个网页设置认证的意义也就不大了吧哈哈哈。有没有解决方案呢,不太懂这方面的内容。

配置nginx代理location为example.com/v1。 nginx配置的location如下: location ^~ /v1 { proxy_pass https://api.openai.com/v1; proxy_set_header Host api.openai.com; proxy_ssl_name api.openai.com; proxy_ssl_server_name on;

注意Bearer 后改为正确的token。如需用户自定义API key,可注释掉下一行

    proxy_set_header  Authorization "Bearer sk-ABCDEFGbalbalbala(我在openaiapi网页获取的api key)";
    proxy_pass_header Authorization;
    #流式传输,不关闭buffering缓存会卡顿卡死,必须配置!!!
    proxy_buffering off;
}
location / {
    gzip  on;
    gzip_min_length 1k;
    gzip_types text/event-stream;
    auth_basic "Restricted Content";
    auth_basic_user_file /etc/nginx/.htpasswd;

}
Miles629 commented 1 year ago

我傻了,在location v1里把那个sk认证那一行注释掉,在index设置接口和sk默认值就能实现需求了。 但是还是很好奇有没有能够不在前端暴露sk的方法。

xqdoo00o commented 1 year ago

首先,nginx如果html跟反代接口在同一路径,比如html在location /,反代接口在location ^~/v1,前端是不用再配置自定义接口和自定义api的,可以直接用 而如果不在同一路径,前端才需要配置自定义接口和自定义api,比如readme里的第一种使用方法(html跟接口可以不在同一个域名下,只要接口允许跨域)

Miles629 commented 1 year ago

首先,nginx如果html跟反代接口在同一路径,比如html在location /,反代接口在location ^~/v1,前端是不用再配置自定义接口和自定义api的,可以直接用 而如果不在同一路径,前端才需要配置自定义接口和自定义api,比如readme里的第一种使用方法(html跟接口可以不在同一个域名下,只要接口允许跨域)

还真是,谢谢您啦! 不过还是想确认一下,是不是任何人调用example.com/v1/就相当于用了服务器存储的apikey来访问openai的接口?不懂nginx QAQ

xqdoo00o commented 1 year ago

首先,nginx如果html跟反代接口在同一路径,比如html在location /,反代接口在location ^~/v1,前端是不用再配置自定义接口和自定义api的,可以直接用 而如果不在同一路径,前端才需要配置自定义接口和自定义api,比如readme里的第一种使用方法(html跟接口可以不在同一个域名下,只要接口允许跨域)

还真是,谢谢您啦! 不过还是想确认一下,是不是任何人调用example.com/v1/就相当于用了服务器存储的apikey来访问openai的接口?不懂nginx QAQ

是的,你可以把接口加个basic_auth