Nova Kwok's Awesome Blog

新域名,新服务器及对应面向大陆方向提速方案

Before

很早之前没有信用卡,购买域名和服务器都是通过 Alipay(CNY) -> Bitcoin(BTC) 的方式的方式购买,自然,可以选择的域名和服务器商就不多,比如托管 digitalnova.me 域名的 Namecheap 和 yunyun 服务器所在的 YourServer.se,一直以来对一些大型的服务商(比如 DO,Linode)就只好望洋兴叹,可望而不可及。

有了信用卡之后服务器方面租用了 Scaleway 的荷兰机器,内存 4G,一下子 Docker,Wordpress 都可以跑起来了,虽然官方说的是不限制流量且高速的访问,但毕竟是欧洲的服务器,在大陆地区的访问情况总是有点出乎意料,延迟普遍超过 350ms,如下图:

虽说荷兰的机器有着比较好的流量清洗设备,ASIC 硬件防火墙,但是其超慢的大陆访问速度总会影响到大部分用户。

关于域名,Namecheap 对于一些比较好记的单词域名似乎总是想保持自己占有,最初打算开博客的时候以 nova 为关键字搜索发现全部是 Make Offer 状态,哪怕对应的域名并没有被注册,只好选了个 digitalnova.me 这个域名暂时先用着。

After

最近在 Gandi.net 上面搜索 nova 时就发现了这个域名,果断买下,并打算长期使用。

由于 yunyun 服务器将于 2 月中旬到期,我新租用了一台台湾的服务器 (Void) 作为反向代理加速大陆地区的网站访问速度,经过一小段时间的调整,延迟方面已经可以做到大陆普遍小于 60ms,且网站速度方面目前的 ** 无缓存 ** 反向代理已经可以做到以下水平:

首先需要说明的是,部分人可能有个误区认为反向代理总是能提高网站响应速度或者 QPS,比如你用 Docker 搞了个官方的 Wordpress(内置了 Apache 服务器),这个时候在本机做一个 Nginx 反代其实并不会加速访问 (新的 HTTP 协议除外),这个时候的反代主要是用来配置策略和过滤流量使用的 (说到过滤流量,OpenResty 是不是一个更好的选择?).

而本站使用反向代理的原因是:大陆 -> 荷兰速度很慢,大陆 -> 台湾速度很快,台湾 -> 荷兰速度较快,所以大陆 -> 台湾 -> 荷兰就可以获得 ** 比较好 ** 的一个访问速度。

考虑反向代理的过程其实我还是想了一段时间,由于域名是一样的 (最终肯定都需要同一个域名),且服务器不在一个内网网段,所以并不能像网上许多教程教授的反代 Google(域名不一样),或者 IP + 端口的形式 (太不优雅).

最终稍加研究,得出以下可用 (目前看来还是不很优雅,仅仅是可用) 的反向代理方案,首先我的源服务器依然监听这个域名,Nginx 部分配置如下:

server {
    listen 80;
    listen [::]:80 http2;
    server_name nova.moe;
    ...
    index   index.html;
}

在台湾服务器上有一个配置文件 proxy.conf 会被 Nginx 加载,文件内容如下:

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;
client_max_body_size    2000m;
client_body_buffer_size 128k;
proxy_connect_timeout   90;
proxy_send_timeout      90;
proxy_read_timeout      90;
proxy_buffers           32 4k;

台湾服务器上的 Nginx 反向代理设置如下,由于我的服务器都依靠 rDNS,且没有多个上游源,暂且就一个 proxy_pass 解决了事情:

server {
    server_name nova.moe;

    location / {proxy_pass http://destiny.n0vad3v.me;}

    listen 443 ssl;
    ...
    if ($scheme !="https") {return 301 https://$host$request_uri;}
}

为了尽可能少的影响到 SEO,我需要将原来的 URL 的流量给 301 过来,比如 digitalnova.me/about 需要被 301 到 nova.moe/about,这个时候需要在源站的 Server Block 上做一个策略规则,如下:

return 301 https://nova.moe$request_uri;

Protential Problems

目前的网络结构设计达到了以下优点:

不过也有以下可能的问题,例如

#Chinese #Domain #Server