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

实用教程 admin 来源:vircloud 2年前 (2023-03-15) 1110次浏览 0个评论

温馨提示:

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

一、场景

使用 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;
}
Configure

二、问题

访问 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;
}
Configure

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

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


原文:

https://vircloud.net/build/nginx-proxy-404-no-found.html


VPS小白 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:使用 Nginx 反代 OpenAI API 接口报 404 错误问题
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址