通过 Nginx Stream 对语雀登录接口进行4层转发加速

前言

博客使用了Hexo(部署)+语雀(写作)+Elog(集成)的方案。但Elog在拉取语雀文章时有较高概率出现登录接口请求超时的问题。分析其原因在于语雀登录接口仅存在上海阿里云单一Endpoint,而博客站点物理位置距离较远,需要对登录接口进行转发加速。
本教程也同样适用于包括但不限于语雀在内的服务。

准备工作

  • 准备一台访问中国大陆速度较快的非中国大陆VPS
  • 本文使用操作系统为 Ubuntu 22.04.03 LTS (Jammy)

方案步骤

安装 Nginx (1.9.0 版本以上)

apt update && apt -y install nginx

修改 nginx.conf

文件位于 /etc/nginx/nginx.conf
文件末尾插入 stream 配置

stream {
    server {
        listen 443; # 监听端口 443
        ssl_preread on; # 在SSL握手前读取客户端发送的数据
        resolver 8.8.8.8 ipv6=off valid=60s; # 域名解析使用 DNS 可自行更改,IPv6 可以选择性开启
        proxy_pass $ssl_preread_server_name:$server_port; # 将请求转发至握手包中的server_name,即源站
    }
}

可选: http 跳转 https,在 http 代码块中添加 server 配置
需将 include /etc/nginx/sites-enabled/*; 注释

http {
  # ...
  # include /etc/nginx/sites-enabled/*;
  server {
    listen 80;
    server_name _;
    location / {
       return 301 https://$host$request_uri;
    }
  }
  # ...
}

重载 Nginx 配置

使用 nginx -t 测试配置文件是否正确,使用 nginx -s reload 对配置文件进行重载

测试

在需要使用加速服务的机器上修改 /etc/hosts,在文件末尾另起一行添加 <加速IP> www.yuque.com,保存并退出。通过curl https://www.yuque.com/进行连通性测试,若能正常返回内容则为配置成功。

对入站IP进行过滤

由于Nginx Stream转发规则是针对所有的域名,因此我们需要针对80/443端口的入站IP进行限制。

sudo ufw allow 22 # UFW默认规则是阻止所有外部流量。因此需要先允许外部访问SSH端口
sudo ufw allow from <允许的IP地址> to any port 80 
sudo ufw allow from <允许的IP地址> to any port 443
sudo ufw enable # 开启UFW服务

总结

语雀登录接口怎么就不上个CDN呢