WangMao's Blog

Create more bugs.

造轮子之谷歌镜像站

造轮子系列 8 评

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 就直接不用测试了,肯定不行。有其他站点测试成功的朋友,欢迎补充。

声明

本文只做技术探讨,由此产生的法律责任后果自负。

记国庆看海
8 评论
    分成比例Chrome 90Windows 10
    2021年04月23日回复

    个人认为,其实国家设置wall的目的是做一个区分,免得有些人整天看到一点外网的东西就整天当公知去了,有本事能翻墙上去的,实话实说,是有了一定判断能力和一定本事的人,内心会对所有新闻有一个判断,上不去的人,就是那种非常容易就被带节奏的人。自己有本事自己上就可以了,不必要说什么闭关锁国,性质不一样,谢谢聆听

      SecretChrome 90OSX
      2021年04月23日回复

      @分成比例 感谢你的评论,文章撰写时年轻气盛,部分地方用词不当,我会关闭相关文章的展示,感谢指正。

        timaFirefox Browser 89Windows 10
        2021年06月25日回复

        @Secret 挺正能量,为你俩点赞

    fcblChrome 90Windows 10
    2021年04月23日回复

    个人认为,其实国家设置wall的目的是做一个区分,免得有些人整天看到一点外网的东西就整天当公知去了,有本事能翻墙上去的,实话实说,是有了一定判断能力和一定本事的人,内心会对所有新闻有一个判断,上不去的人,就是那种非常容易就被带节奏的人。自己有本事自己上就可以了,不必要说什么闭关锁国,性质不一样,谢谢聆听。我知道你喜欢谷歌,我个人也是个经常翻墙上网的人,我知道有些事情是不能让一些愤青看到的,这样只会让社会越来越动荡,越来越乱。

    奇趣保罗Chrome 103OSX
    2017年09月23日回复

    感谢安利,有机会可以试试(为啥感觉你换了这样的评论系统好麻烦)

    Mao WangChrome 103OSX
    2017年09月25日回复

    @Dreamer-Paul 哈哈,并不麻烦啊,评论了一次就自动登录了呢。

    Franklau1212Chrome 103OSX
    2018年03月26日回复

    你好楼主,我已经成功安装了nginx,但是仍然无法使用。可否加我Q4318174我们讨论下呢?

    Mao WangChrome 103OSX
    2018年03月27日回复

    @Franklau1212 我博客顶部有我的联系方式,欢迎骚扰。:joy: