Nginx代理ChatGPT流式访问

2024-03-13 12:32:05 浏览数 (3)

当ChatGPT无法直接访问时,需要某个地方设置一个代理服务,如Nginx代理,接下来介绍如何设置API代理并保持流式输出的能力。

假设后端服务的地址为http://127.0.0.1:3000,后端提供了流式返回的API能力,如果需要通过代理去访问该服务,Nginx的代理配置如下:

代码语言:shell复制
server {
    listen       80;
    listen       [::]:80;
    server_name  _;

    location / {
        root /data/www/chat;
        index index.html;
    }
    
    location /api {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Upgrade "";
        proxy_set_header Connection "upgrade";
        proxy_http_version 1.1;
        chunked_transfer_encoding off;
        proxy_cache off;
    }
}

其中如下配置是设置支持流式返回:

代码语言:shell复制
proxy_set_header Upgrade "";
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_cache off;

所以若直接代理ChatGPT的聊天API(https://api.openai.com/v1/chat/completions),可以配置如下:

代码语言:shell复制
server {
    listen       80;
    listen       [::]:80;
    server_name  _;
    ssl_protocols TLSv1.2 TLSv1.3;
    
    location / {
        proxy_pass https://api.openai.com/v1/chat/completions;
        proxy_set_header Upgrade "";
        proxy_set_header Connection "upgrade";
        proxy_http_version 1.1;
        chunked_transfer_encoding off;
        proxy_cache off;

        proxy_set_header X-XSS-Protection "1; mode=block";
        proxy_set_header X-Frame-Options SAMEORIGIN;
        proxy_pass_request_headers on;
        proxy_pass_request_body on;
        proxy_ssl_server_name on;
        proxy_ssl_session_reuse off;
    }
}

因为代理的是HTTPS请求,因此需要额外加一些SSL请求配置:

代码语言:shell复制
proxy_set_header X-XSS-Protection "1; mode=block";
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_pass_request_headers on;
proxy_pass_request_body on;
proxy_ssl_server_name on;
proxy_ssl_session_reuse off;

当然也可以修改proxy_pass配置实现更灵活的代理方式。

0 人点赞