利用反向代理和DNS智能解析加快网站访问速度

自从上次绿云(GreenCloud)突然的系统故障导致我的博客数据取不出来后,我决定放弃用绿云建站,转而使用口碑更好、更加稳定的contabo,contabo有德国慕尼黑、纽伦堡、美国密苏里州3个机房,我选择的是他家的德国纽伦堡机房,因为服务器远在德国,国内直接访问速度十分不佳,丢包严重,因此我决定使用反向代理的方式来加快网站的访问速度。

反向代理

反向代理简介

反向代理在电脑网络中是代理服务器的一种。服务器根据客户端的请求,从其关系的一组或多组后端服务器(如Web服务器)上获取资源,然后再将这些资源返回给客户端,客户端只会得知反向代理的IP地址,而不知道在代理服务器后面的服务器集群的存在。

这里有个通俗点的简介,关于正向代理与反向代理:https://www.notion.so/68dce6d0bc4f48089496e6e0b1081c32

反向代理作用

反向代理的主要作用为:

  • 对客户端隐藏服务器(集群)的IP地址
  • 安全:作为应用层防火墙,为网站提供对基于Web的攻击行为(例如Dos/DDos)的防护,更容易排查恶意软件等
  • 为后端服务器(集群)统一提供加密和SSL加速(如SSL终端代理)
  • 负载均衡,若服务器集群中有负荷较高者,反向代理通过URL重写,根据连线请求从负荷较低者获取与所需相同的资源或备援
  • 对于静态内容及短时间内有大量访问请求的动态内容提供缓存服务
  • 对一些内容进行压缩,以节约带宽或为网络带宽不佳的网络提供服务
  • 减速上传
  • 为在私有网络下(如局域网)的服务器集群提供NAT穿透及外网发布服务
  • 提供HTTP访问认证
  • 突破互联网封锁(不常用,因为反向代理与客户端之间的连线不一定是加密连线,非加密连线仍有遭内容审查进而遭封禁的风险;此外面对针对域名的关键词过滤、DNS缓存污染/投毒攻击乃至深度数据包检测也无能为力)

常用反向代理软件

  • Nginx、Tengine
  • Apache HTTP Server
  • Varnish cache
  • Squid Cache
  • Traffic Server
  • HAProxy
  • YXORP
  • Polipo
  • Privoxy
  • IIS

在这里我使用的是Nginx反向代理,通过宝塔面板实现,简单快捷,不需要自己去添加相应的代码,适合小白或入门用户。

操作过程

条件简介

被反代的服务器(后端):一台contabo德国

用来反代的服务器(前端):一台华为云香港,一台甲骨文(Oracle)韩国,一台Ovh新加坡

域名:ioli.cc

所用技术:反向代理,DNSPod智能分线路解析

所用环境:系统均为Debian10,均安装宝塔面板

具体操作

域名解析

腾讯的DNSPod上可以实现分线路智能解析,判断用户的上网线路是联通或电信或移动,再智能返回对应服务器的 IP。

华为云香港因为对联通友好,我便将联通线路解析到华为云香港的IP上;

甲骨文韩国因为是CN2GIA线路,对电信友好,我便将电信线路解析到华为云香港的IP上;

Ovh新加坡对移动友好,我便将移动线路解析到Ovh新加坡的IP上。

注意无需解析到源站IP上,不然就成了自己反代自己。

dns

上图变为解析的结果,电信运营商用户访问将返回甲骨文的IP地址,联通运营商用户访问将返回华为云的IP地址,移动运营商用户访问将返回Ovh的IP地址,同时要记住无论是否添加地区或者运营商的线路,一定需要先添加好【默认】线路的解析

反向代理

域名解析完成后,在用来反代的三台服务器上先安装好宝塔面板。

Debian:

1
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh

安装完成后,进入宝塔面板地址,会提示你安装Nginx,MySQL,PHP,phpMyAdmin,在这里用来反代的服务器只需要安装Nginx,其他的随意,被反代的则需要都安装。

然后在三台服务器的宝塔面板上添加网站

wz

PHP版本选择纯静态,数据库不用创建。

在SSL证书这添加证书,注意无论是反代服务器还是被反代的服务器,添加的域名所用的SSL证书必须相同,否则网站无法打开。

例如,ioli.cc所用的证书为Buypass,因此在四台服务器的宝塔面板网站SSL证书处均应填入证书的内容以及密钥。

ssl

接下来便是添加反向代理了,点击设置

settings

点击反向代理,添加反向代理

fd

代理名称随意,目标URL填入https://被反代的服务器IP,即后端服务器IP, 发送域名填入绑定的域名

ip

我用了三台服务器反代,也就需要在三台服务器上进行以上的操作一共三次。

关于是否开启缓存,我觉得看个人意愿,不过我觉得不要开为好,浪费资源,一切让建站机自己去处理就好;如果开的话,注意缓存时间的填写。

完成以上操作后,还有最后一步,打开/etc/hosts,在空白处填入源站服务器IP 你的域名,注意要中间有空格,多台服务器反代的话需要在每一台服务器上完成此操作。

hosts

使用宝塔面板可直接编辑;使用命令行输入

1
vim /etc/hosts

再输入ip和域名即可。

完成以上步骤就大功告成了,可用以下一段话做个总结。

假如有三个服务器:ABC ,BC要反代A。 A为源站,A新建网站,域名是baidu.com。 BC只安装Nginx,新建网站,域名是baidu.com。 BC服务器添加反向代理(宝塔面板),目标URL填【https://源站IP】,发送域名baidu.com保存。 BC服务器打开 /etc/hosts 文件添加:A服务器ip baidu.com ,域名baidu.com解析到BC服务器ip。

补充下,源站指的是后端服务器,也就是实际建站的服务器,在反向代理的过程中,源站的设置就和普通建站一样,没有任何改变。

总结

除了反向代理外,还可以CloudFlare自选节点IP教程,免费CDN加速VPS,具体的速度快慢需要通过实际的测试去了解,我这里就不再多说。