首先,我们假定当前的网络访问情况如下:
我作为使用者,在网络环境A下进行网络访问。服务器B为部署了gpt_academic(下简称gptac)的服务端。但是A访问B并不通畅,经常会无法访问。此时,服务器C分别与A、B都具有非常良好的连通性。本篇博文主要讲的就是将C作为代理服务器,将A网络环境下的所有对B的访问,都有C进行中间者进行传输。

需要说明的是,本文讲到的代理服务器设置学习和尝试务必保证:1、相关域名、服务器等都根据国家相关法律依法备案;2、各项使用到的云服务提供商必须是国家允许的正规云服务商;3、个人用户仅做个人学习测试使用,不可超出权限操作。

下面是正文

这里我们假设B部署的gptac的访问域名为b.com,C服务器的解析域名为c.com。我们在B服务器中正常部署gptac并对其实现ssl加密访问后(这里可以看我之前的文章:点击查看),就可以对C服务器进行设置了。

我们在C服务器安装NGINX服务器,随后对C的nginx配置文件进行修改。我们在/etc/nginx文件夹下面新建一个名为ssl的文件夹用于放置b.com和c.com的证书。随后我们在sites-available中创建两个文件:
第一个为b.ssl.conf,并加入下面的内容

server {
    listen 443 ssl;
    server_name b.com;

    # SSL配置
    ssl_certificate /etc/nginx/ssl/b.crt;
    ssl_certificate_key /etc/nginx/ssl/b.key;

    # 反向代理配置
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass https://b.com;
    }
}

第二个为c.ssl.conf,并加入下面的内容

server {
    listen 443 ssl;
    server_name c.com;

    # SSL配置
    ssl_certificate /etc/nginx/ssl/c.crt;
    ssl_certificate_key /etc/nginx/ssl/c.key;

    # 反向代理配置
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass https://c.com;
    }
}

随后在/etc/nginx的nginx.conf的http的{}中添加下面的内容
在 /etc/nginx/ 目录下打开 nginx.conf 配置文件,并在 http {} 块中添加以下内容:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    return 301 https://$host$request_uri;
}

# Inlcude the b.ssl.conf file
include /etc/nginx/ssl/b.ssl.conf;

# Inlcude the c.ssl.conf file
include /etc/nginx/ssl/c.ssl.conf;
** ssl.conf**

注意我们要将sites-available中的文件软链接到sites-enabled中

ln -s /etc/nginx/sites-available/b.ssl.conf /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/c.ssl.conf /etc/nginx/sites-enabled/

随后使用nginx -t命令自检查看是否有问题
如果显示无误,则service nginx reload重新加载服务。

到此时,我们访问C服务器已经可以看到打开的是B服务器的页面内容了。但是作为gptac,我们使用的时候会发现一直显示connection error。此时我们还需要设置websocket以保证能够正常使用gptac的各项功能。
我们需要在b.ssl.conf和c.sssl.conf的location{}中分别加入下面两行内容:

proxy_set_header Upgrade $http_upgrade;         # Websocket配置
proxy_set_header Connection $connection_upgrade;   

随后我们重新启动nginx服务,即可正常使用。