利用docker快速搭建个性化Google镜像
因为上个月有朋友和我讨论到利用Nginx反向代理到Google的问题,当时我觉得也挺有意思的,所以就试了一下,感觉用来搜东西挺方便的,所以就分享给了我们协会的同学一起用。后来想到了Nginx支持很多第三方模块,我就把这个镜像给重新定制了一下,虽然只是加了一段字,不过看起来真的爽。
需要的准备:
- 一台境外的VPS,其实能直接访问Google的那种。推荐选用香港或日本机房的,延时较低访问快。
- 最好有个域名,顶级或二级域名都行。买一个也不贵,很多域名第一年才几块钱。
关于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:
[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镜像时,打开看到都是你的红包二维码了,手动滑稽。
赞赏
微信赞赏支付宝赞赏
3条评论