使用 Nginx 反代 OpenAI API 接口报 404 错误问题

小助手读文章 00:00 / 00:00

温馨提示:
本文所述内容不具普遍性,可能因操作环境差异而与实际有所出入,故请勿照搬照抄,仅供参考。

一、场景

使用 A 服务器的 80 端口作为入口,来访问 B 服务器的 443 端口上的网站;其中,反代代码如下:

server {
        listen 80;
        server_name _;
        location / {
                proxy_pass https://api.openai.com;
                proxy_redirect off;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        access_log /var/log/nginx/openai.log;
        error_log /var/log/nginx/openai.error.log;
}

二、问题

访问 A 服务器的 80 端口,任何链接都报 404 Not Found 错误;

三、分析

这个问题的原因是,A 服务器上的 Nginx 反代时,入口是 HTTP,端口为 80,默认传递到 B 服务器上 Host 以及 Port,就变成了 server_name 里的 HostPort 就变成了 80,即 B 服务器真正要去访问的应该是 https://api.openai.com,但是接收到的头部信息却是 Host: _:80,两边不一致,导致了这个错误。

四、方案

改善后,配置如下:

server {
        listen 80;
        server_name _;
        location / {
                proxy_pass https://api.openai.com;
                proxy_redirect off;
                proxy_set_header Host $proxy_host:$proxy_port;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                #proxy_pass https://api.openai.com;
        }
        access_log /var/log/nginx/openai.log;
        error_log /var/log/nginx/openai.error.log;
}

这里的 $proxy_host 就是上面 proxy_pass 里的地址,$proxy_port 就是 proxy_pass 里的端口(https 默认是 443)。

改好后重启 Nginx 服务,问题解决。


ArmxMod for Typecho
个性化、自适应、功能强大的响应式主题

推广

 继续浏览关于 反代nginx教程网站经验方法错误 的文章

 本文最后更新于 2023/03/07 14:27:24,可能因经年累月而与现状有所差异

 引用转载请注明: VirCloud's Blog > 建站 > 使用 Nginx 反代 OpenAI API 接口报 404 错误问题

精选评论

  1. 欧文斯

    温馨提示:使用非官方接口,有被封禁的风险