首先,我们假定当前的网络访问情况如下:
我作为使用者,在网络环境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服务,即可正常使用。