Updated:
- 2021-04-23: 更新文章,删减不恰当的段落和补充细节。
注意:本文仅作学习研究,网络并非非法之地,请约束互联网访问行为并自行承担责任,共同净化网络环境。
镜像,原意是光学里指的物体在镜面中所成之像。引用到计算机网络上,网站镜像是指对网站内容的拷贝。镜像通常用于为相同信息内容提供不同的源,特别是在下载量大的时候提供了一种可靠的网络连接。制作镜像是一种文件同步的过程。 ------ 维基百科
如今~~翻墙~~的方式多种多样,把我所了解到的分享出来,有兴趣的朋友可以自己去了解。
按资源和技术成本排序(个人见解,如有出入请斧正)
- hosts
- 蓝灯
- SSH 动态转发
- 镜像站
- Shadowsocks / v2ray
- 去香港 :)
镜像站又分为两种,一种是通过程序爬取 Google 搜索的结果页,另外一种通过服务器(本文为Nginx)反向代理。而他们唯一的相同点都是服务器需要在大陆以外,且大陆能正常访问。
可以尝试用 tcping
来测试主机的网络情况,具体参见 tcping - PyPi。
先说说通过程序爬取,这里以 PHP 为例。原理是用户访问程序,程序将搜索关键字与谷歌搜索的链接进行参数拼接,然后通过 curl
进行抓取页面并输出。当然这种手段比较暴力,以至于 Google 的很多图片、CSS、JS等资源均可能加载失败,不过也可以通过正则匹配资源路径进行缓存,然后替换页面中的地址再输出。
但不得不说,通过爬取结果页的效率是相当慢的,整个过程被下载页面和匹配替换耽搁了很长的时间。
反向代理的方法多种多样,本文以服务器常用 Nginx 论述。反向原理是用户访问代理服务器,代理服务器将请求转发给目标服务器,目标服务器接收并响应给代理服务器,而代理服务器讲结果响应给用户。
看似过程和直接爬取结果差不多,但所执行的效率远高于爬取结果。
准备
- 境外服务器一台(需要安装Linux、Nginx)
- 域名(子域名均可)
- 耐心
开始
注:服务器需要安装 Nginx ,Nginx安装本文不在讨论范围,自己可以查文档进行安装。
首先,需要在服务器上新建一个虚拟主机(VirtualHost):
# 移动到 Nginx 配置目录
$ cd /usr/local/nginx/conf/vhost/
# 创建一个配置文件,格式:*.conf
$ touch google.conf
# 编辑该文件
$ vim google.conf
然后将以下配置复制入配置文件,并修改
server
{
listen 80;
listen 443 ssl;
server_name xxx.example.com; #修改为你的域名
#以下为 ssl 证书存放位置
#ssl_certificate /etc/.../fullchain.pem; #修改为您的证书地址
#ssl_certificate_key /etc/.../privkey.pem; #修改为你的证书地址
#以下为强制跳转 https
#if ($server_port !~ 443){
# rewrite ^(/.*)$ https://$host$1 permanent;
#}
error_page 497 https://$host$request_uri;
location / {
#需要代理的地址,这里为 谷歌香港
proxy_pass https://www.google.com.hk/;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
测试
然后保存并退出
# 按下 Esc 键
# 输入 : (Shift + ;)
$ qw
# 使用 nginx 命令测试配置文件 出现 successful 则通过测试
$ nginx -t
如果执行 nginx -t
命令后报错,根据行号找到报错原因并修改。
最后到域名解析商添加一个 A记录
到你的主机 IP 。
其实到这里你所搭建的镜像站就能正常访问了,但在配置中能看到,还有 ssl 证书的相关配置。在这里建议镜像站均使用 https 协议,用于加密传输内容,尽量规避 GWF 以防封锁服务器 IP,免费证书各大主机商都可以申请。然后上传保存到服务器中,修改好证书的路径,打开所有 ssl 相关的注释便能通过 https 进行访问了。
还有哪些站点能够镜像?这个就没试验过了,不过刚刚测试了 wiki 中国,CSS 样式没有。且 console 一大堆报错,就直接删掉了。Youtube 就直接不用测试了,肯定不行。有其他站点测试成功的朋友,欢迎补充。
声明
本文只做技术探讨,由此产生的法律责任后果自负。