利用docker快速搭建个性化Google镜像

利用docker快速搭建个性化Google镜像

因为上个月有朋友和我讨论到利用Nginx反向代理到Google的问题,当时我觉得也挺有意思的,所以就试了一下,感觉用来搜东西挺方便的,所以就分享给了我们协会的同学一起用。后来想到了Nginx支持很多第三方模块,我就把这个镜像给重新定制了一下,虽然只是加了一段字,不过看起来真的爽。

需要的准备:

  1. 一台境外的VPS,其实能直接访问Google的那种。推荐选用香港或日本机房的,延时较低访问快。
  2. 最好有个域名,顶级或二级域名都行。买一个也不贵,很多域名第一年才几块钱。

关于Google镜像的搭建其实网上已经有不少的文章了,而且也不难。但是考虑到搭建花费的时间成本,所以我就选用了docker。因为之前看到GitHub上已经有人打包好了,已添加Google搜索镜像模块ngx_http_google_filter_module,简直不要太棒。我fork了这个项目,对其中的一些配置做了修改,也花了不少时间。

GitHub传送门

希望大家能给我的github点个star,疯狂暗示。

我这里用的Centos7,阿里云香港的主机,30M的带宽9$每月还是有点小贵。大家如果只是随便用用的话,可以选vultr,他们家的都比较便宜。不多说了,直接开始搭建。

yum install -y git docker wget

这里如果想快速搭建的话就执行下面这条命令

docker run -p 80:80 -d bohan/onemirror

意思是将容器的80端口映射到服务器的8080端口,此时浏览器访问   http://你vps的ip:80

如果你的80端口已经占用换成其他端口即可,同时修改-p参数和url后的端口。

如果不能访问,请检查是否已经放行了该端口的流量。比如阿里云就需要在控制台修改安全组策略。

如果没有报错,就已经搭建好了。因为所有的配置在docker里面都搞定了。

然后让你的域名解析到你的ip即可。


如果遇到这样的报错(ps:我在国内阿里云上运行docker就会有这样的问题)

/usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused “process_linux.go:258: applying cgroup configuration for process caused \”Cannot set property TasksAccounting, or unknown property.\””.

这是阿里云官方的docker安装流程

把之前装的docker删干净,卸载docker:

[root@zgao onemirror]# yum list installed | grep docker
docker.x86_64 2:1.13.1-94.gitb2f74b2.el7.centos @extras
docker-client.x86_64 2:1.13.1-94.gitb2f74b2.el7.centos @extras
docker-common.x86_64 2:1.13.1-94.gitb2f74b2.el7.centos @extras

yum -y remove docker docker-common.x86_64 docker-client.x86_64

rm -rf /etc/systemd/system/docker.service.d /var/lib/docker /var/run/docker

现在重新安装docker。

# step 1: 安装必要的一些系统工具

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# Step 2: 添加软件源信息

sudo yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # Step 3: 更新并安装Docker-CE

sudo yum makecache fast

sudo yum -y install docker-ce

# Step 4: 开启Docker服务

sudo service docker start

最后再docker run 即可。


实现个性化定制Google镜像

正如标题所言,为了快速搭建所以用docker来实现。但是想要做到个性化定制的话,就需要修改nginx的配置文件。这里我们用到了nginx内置的一个模块ngx_http_sub_module,但是nginx默认没有开启的,不过我在dockerfile已经加进去了。

本质就是进行内容替换。在服务器代理访问Google后,将数据返回给客户端,nginx就相当于是中间人,可以将中间传输的数据进行替换和修改。

git clone https://github.com/zgao264/onemirror.git

vim onemirror/nginx/conf.d/google.conf

其实这是前几天我在寝室里突然想出来的,想把我们协会的Google镜像给装饰一下,有点自己的东西,那么我是怎么做到的呢,其实方法很简单。比如我们想要插入自己的内容,可以先查看页面源码。

替换时保持原来标签不变,加入自己的标签即可。如图我想在那张Google图片的上面插入内容,我就在它的前面插入即可。


语法:     sub_filter string replacement;
默认值:     —
配置段:     http, server, location
设置需要使用说明字符串替换说明字符串.string是要被替换的字符串,replacement是新的字符串,它里面可以带变量。

语法:     sub_filter_last_modified on | off;
默认值: sub_filter_last_modified off;
配置段:     http, server, location

字符串替换一次还是多次替换,默认替换一次,例如你要替换响应内容中的<img alt=”Google” height=”92″ id=”hplogo”,如果有多个出现,那么只会替换第一个,如果off,那么所有的<img alt=”Google” height=”92″ id=”hplogo”都会 被替换。

所以我们保证要替换的值唯一即可,不然会出现多次替换。


现在修改完了nginx的配置文件,只要重新创建镜像即可

cd ~ && docker build -t google:1.0 onemirror/

现在可能会等待一段时间,执行完成会有提示。

接下来运行容器。

docker run -p 80:80 -d google:1.0

这样就ok了。现在在浏览器访问我们的ip如果能看到替换后的字样,就说明搭建成功了。

因为我的80端口已经占用了,所以我就随便换了个端口。同理手机上的浏览器也一样,以我们协会的镜像为例。

感觉还是挺有意思的。当然这个Google首页的内容你想如何替换都行,甚至用你的支付宝红包二维码把那张Google的图片替换掉都行,只需把图片的url换成你图片的url即可。哈哈,这样每次别人访问你的Google镜像时,打开看到都是你的红包二维码了,手动滑稽。

 

zgao

愿有一日,安全圈的师傅们都能用上Zgao写的工具。

3条评论

思谷学术 发布于2:24 下午 - 4月 4, 2020

这个现成的谷歌镜像: https://siguso.com/google/

嫌搭建麻烦的话可以试试

匿名 发布于5:33 下午 - 3月 29, 2020

我在想pornhub能不能做个镜像

    Wesley 发布于1:56 上午 - 5月 23, 2020

    哈哈我用Nginx试过,访问的域名不是pornhub.com的时候会无限重定向,暂时不知道怎么解决