Pandora部署到公网后无法访问model和conversation的资源

Pandora部署到公网后无法访问model和conversation的资源

Posted by Gavin on September 19, 2023

潘多拉 (Pandora),一个让你呼吸顺畅的 ChatGPT。 潘多拉实现了网页版 ChatGPT 的主要操作。后端优化,绕过 Cloudflare,速度喜人。 项目地址: https://github.com/zhile-io/pandora

现象

之前只是在内网的环境里面部署使用,使用的比较的愉快,但是当我想把这个服务暴露到公网的时候,遇到了对话的历史记录无法加载出来的情况

根本原因

根本原因就是,家用宽带的80和443端口被封禁了,所以我用的不是标准的端口而是自定义的11445 所以需要在nginx配置文件里面,设置请求头里面的host加上端口号,如下:

proxy_set_header Host $host:11445;

模拟验证

我对比了下内网和外网访问的时候,/api/models和/api/conversations这两个在不同网络环境下的差异
看下面的图片
image

情况说明

内网的访问的时候,请求头里面的host 是 192.168.8.1:8899
而公网环境访问的时候,请求头里面的host是 www.xxxxx.xyz (我的域名)

可能的原因

所以我怀疑,公网访问的时候后面默认的是80或者443的端口 也就是host可能是 www.xxxxx.xyz:80 或者www.xxxxx.xyz:443 只不过80或443是默认的端口,所以省略了 但是我的服务器的用的是家用的普通的宽带,80和443端口被封禁了,我用的是11445这个端口

尝试办法

所以我修改了nginx配置文件里面的转发请求头相关的配置

# 修改前
proxy_set_header Host $host;

# 修改后
proxy_set_header Host $host:11445;

效果验证

可以看到network里面的状态是200了
而且网页上也可以加载出来历史对话记录了

image
image

完整的nginx的配置文件

```nginx
upstream pandora_gpt {
	server 127.0.0.1:8899;
}

server {

  listen 11445 ssl;
  listen [::]:11445 ssl;
  
  server_name localhost;
  
  # resolve 400 Request Header Or Cookie Too Large
  large_client_header_buffers 4 32k;
  
  #/etc/nginx/conf.d/
  ssl_certificate xxxx.pem;
  ssl_certificate_key xxxx.key;

  charset utf-8;

        # 配置静态资源
        location ~* ^/(.*\.(js|css|png|otf|woff))$ {
            # 配置缓存
            #proxy_cache my_cache;
            proxy_cache_valid 200 1d;
            proxy_cache_key $host$uri$is_args$args;
            proxy_ignore_headers Cache-Control;
            proxy_ignore_headers Set-Cookie;

            # 关闭认证
            auth_basic off;

            # 转发请求头配置
            proxy_set_header Host $host:11445;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            add_header Content-Security-Policy "upgrade-insecure-requests;connect-src *";
			proxy_set_header X-Forwarded-Proto $scheme; # 6/17 18 08 增加

            # 代理请求到后端服务器
            proxy_pass http://pandora_gpt;
        }

        location / {
			#关闭验证
            auth_basic off;
			#转发请求头配置
            proxy_set_header Host $host:11445;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            add_header Content-Security-Policy "upgrade-insecure-requests;connect-src *";
			proxy_set_header X-Forwarded-Proto $scheme; # 6/17 18 08 增加
            #代理请求到后端服务器
			proxy_pass http://pandora_gpt;
        }

        # 处理非静态资源的 /api 开头的所有资源
        location ~* ^/api {
            # 禁用缓存
            proxy_no_cache 1;
            proxy_cache_bypass 1;

            # 认证配置
            auth_basic "auth";
            auth_basic_user_file /etc/config/htpasswd;

            # 请求头配置
            proxy_set_header Host $host:11445;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            add_header Content-Security-Policy "upgrade-insecure-requests;connect-src *";
			proxy_set_header X-Forwarded-Proto $scheme; # 6/17 18 08 增加

            # 转发服务配置
            proxy_pass http://pandora_gpt;
        }

        # gitlab    
        location /gitlab/ {
            #auth_basic "auth";
            #auth_basic_user_file /etc/config/htpasswd;
            #rewrite ^/*.html$ /ad/*.html break;     
            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_set_header X-Forwarded-Proto $scheme; # 6/17 18 08 增加
            proxy_pass http://192.168.8.141:10008;
            } 
}

```